diff --git a/build.gradle b/build.gradle index 2d1212d..c50e89b 100644 --- a/build.gradle +++ b/build.gradle @@ -22,11 +22,13 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'nz.net.ultraq.thymeleaf:thymeleaf-layout-dialect' // implementation 'com.github.darrachequesne:spring-data-jpa-datatables:5.1.0' + implementation 'org.apache.commons:commons-lang3:3.10' implementation 'commons-io:commons-io:2.6' implementation 'com.jayway.jsonpath:json-path:2.4.0' implementation 'io.netty:netty-all:4.1.60.Final' runtimeOnly 'com.h2database:h2' + implementation 'org.mdkt.compiler:InMemoryJavaCompiler:1.3.0' testImplementation 'org.springframework.boot:spring-boot-starter-test' } diff --git a/src/main/java/com/eactive/httpmockserver/PostConstructBean.java b/src/main/java/com/eactive/httpmockserver/PostConstructBean.java new file mode 100644 index 0000000..dfac53c --- /dev/null +++ b/src/main/java/com/eactive/httpmockserver/PostConstructBean.java @@ -0,0 +1,28 @@ +package com.eactive.httpmockserver; + +import com.eactive.httpmockserver.script.ScriptInfoService; +import com.eactive.httpmockserver.script.ScriptLoader; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; + +@Component +public class PostConstructBean { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + + @Autowired + public ScriptInfoService scriptInfoService; + + @PostConstruct + public void init() { + logger.info("init scripts"); + try { + ScriptLoader.getInstance().init(scriptInfoService); + } catch (Exception e) { + logger.error("init scripts failed", e); + } + } +} diff --git a/src/main/java/com/eactive/httpmockserver/script/ScriptController.java b/src/main/java/com/eactive/httpmockserver/script/ScriptController.java index 90aa60e..d26f06b 100644 --- a/src/main/java/com/eactive/httpmockserver/script/ScriptController.java +++ b/src/main/java/com/eactive/httpmockserver/script/ScriptController.java @@ -62,7 +62,7 @@ public class ScriptController { } @PostMapping("/manage/saveScriptInfo") - public String saveScriptInfo(@Valid ScriptInfo spec, BindingResult result, Model model) throws IOException, ClassNotFoundException { + public String saveScriptInfo(@Valid ScriptInfo spec, BindingResult result, Model model) throws Exception { if (result.hasErrors()) { return "page/add-edit-script-info"; } @@ -74,7 +74,7 @@ public class ScriptController { } if (BooleanUtils.toBoolean(spec.getUseYn())) { - // 기존설정 useYn=N으로 수정 + // useYn=N scriptInfoService.setUnuseOthers(spec.getId()); } diff --git a/src/main/java/com/eactive/httpmockserver/script/ScriptInfoService.java b/src/main/java/com/eactive/httpmockserver/script/ScriptInfoService.java index 575c9e8..389d741 100644 --- a/src/main/java/com/eactive/httpmockserver/script/ScriptInfoService.java +++ b/src/main/java/com/eactive/httpmockserver/script/ScriptInfoService.java @@ -9,6 +9,8 @@ import java.util.Optional; public interface ScriptInfoService { public ScriptInfo findActiveScriptInfo(); + public List findAllScriptInfos(); + public List findAllScriptInfos(Pageable pageable); public List findAllScriptInfos(Example example, Pageable pageable); diff --git a/src/main/java/com/eactive/httpmockserver/script/ScriptInfoServiceImpl.java b/src/main/java/com/eactive/httpmockserver/script/ScriptInfoServiceImpl.java index fbc9d62..d4ad2ba 100644 --- a/src/main/java/com/eactive/httpmockserver/script/ScriptInfoServiceImpl.java +++ b/src/main/java/com/eactive/httpmockserver/script/ScriptInfoServiceImpl.java @@ -23,6 +23,11 @@ public class ScriptInfoServiceImpl implements ScriptInfoService { return dao.findFirstByUseYn("Y"); } + @Override + public List findAllScriptInfos() { + return dao.findAll(); + } + @Override public List findAllScriptInfos(Pageable pageable) { Page pagedResult = dao.findAll(pageable); diff --git a/src/main/java/com/eactive/httpmockserver/script/ScriptLoader.java b/src/main/java/com/eactive/httpmockserver/script/ScriptLoader.java index 776ce81..ff05b54 100644 --- a/src/main/java/com/eactive/httpmockserver/script/ScriptLoader.java +++ b/src/main/java/com/eactive/httpmockserver/script/ScriptLoader.java @@ -1,6 +1,8 @@ package com.eactive.httpmockserver.script; import org.apache.commons.io.IOUtils; +import org.mdkt.compiler.InMemoryJavaCompiler; +import org.springframework.beans.factory.annotation.Autowired; import javax.tools.JavaCompiler; import javax.tools.ToolProvider; @@ -12,6 +14,7 @@ import java.lang.reflect.InvocationTargetException; import java.net.URL; import java.net.URLClassLoader; import java.util.HashMap; +import java.util.List; import java.util.Map; public class ScriptLoader{ @@ -36,42 +39,29 @@ public class ScriptLoader{ return newInstance; } - class DynamicLoader extends ClassLoader{ - public Class