diff --git a/pom.xml b/pom.xml index f7d48ea9..dfdfcabc 100644 --- a/pom.xml +++ b/pom.xml @@ -15,7 +15,7 @@ com.codingapi.springboot springboot-parent - 2.10.52 + 2.10.53 https://github.com/codingapi/springboot-framewrok springboot-parent diff --git a/springboot-starter-data-authorization/pom.xml b/springboot-starter-data-authorization/pom.xml index 58ecf4bf..c914d90d 100644 --- a/springboot-starter-data-authorization/pom.xml +++ b/springboot-starter-data-authorization/pom.xml @@ -6,7 +6,7 @@ springboot-parent com.codingapi.springboot - 2.10.52 + 2.10.53 springboot-starter-data-authorization diff --git a/springboot-starter-data-fast/pom.xml b/springboot-starter-data-fast/pom.xml index 4dde9e58..bfef311b 100644 --- a/springboot-starter-data-fast/pom.xml +++ b/springboot-starter-data-fast/pom.xml @@ -5,7 +5,7 @@ springboot-parent com.codingapi.springboot - 2.10.52 + 2.10.53 4.0.0 diff --git a/springboot-starter-flow/pom.xml b/springboot-starter-flow/pom.xml index a5396fe2..adaeeb9a 100644 --- a/springboot-starter-flow/pom.xml +++ b/springboot-starter-flow/pom.xml @@ -6,7 +6,7 @@ springboot-parent com.codingapi.springboot - 2.10.52 + 2.10.53 springboot-starter-flow diff --git a/springboot-starter-script/pom.xml b/springboot-starter-script/pom.xml index 7751f460..0957b26c 100644 --- a/springboot-starter-script/pom.xml +++ b/springboot-starter-script/pom.xml @@ -6,7 +6,7 @@ com.codingapi.springboot springboot-parent - 2.10.52 + 2.10.53 springboot-starter-script diff --git a/springboot-starter-script/src/main/java/com/codingapi/springboot/script/meta/GroovyMetadata.java b/springboot-starter-script/src/main/java/com/codingapi/springboot/script/meta/GroovyMetadata.java index 5c8a45ce..2f73ecf3 100644 --- a/springboot-starter-script/src/main/java/com/codingapi/springboot/script/meta/GroovyMetadata.java +++ b/springboot-starter-script/src/main/java/com/codingapi/springboot/script/meta/GroovyMetadata.java @@ -57,6 +57,16 @@ public GroovyMetadata(GroovyScript groovyScript) { } + public GroovyMetadata(String mainMethod,String returnType, String description) { + this.returnType = returnType; + this.description = description; + this.mainMethod = mainMethod; + this.types = new HashMap<>(); + this.requests = new ArrayList<>(); + this.binds = new ArrayList<>(); + } + + /** * 增加请求参数数据对象 * diff --git a/springboot-starter-script/src/main/java/com/codingapi/springboot/script/strategy/GroovyMetadataGenerateStrategyContext.java b/springboot-starter-script/src/main/java/com/codingapi/springboot/script/strategy/GroovyMetadataGenerateStrategyContext.java index 7b737d84..84372d6f 100644 --- a/springboot-starter-script/src/main/java/com/codingapi/springboot/script/strategy/GroovyMetadataGenerateStrategyContext.java +++ b/springboot-starter-script/src/main/java/com/codingapi/springboot/script/strategy/GroovyMetadataGenerateStrategyContext.java @@ -21,11 +21,18 @@ private GroovyMetadataGenerateStrategyContext() { this.strategies = new ArrayList<>(); } - public void addLoadStrategy(GroovyMetadataGenerateStrategy strategy) { + public void addGenerateStrategy(GroovyMetadataGenerateStrategy strategy) { this.strategies.add(strategy); } + /** + * 清空策略 + */ + public void clear(){ + this.strategies.clear(); + } + public GroovyMetadata generate(GroovyScript groovyScript) { for (GroovyMetadataGenerateStrategy strategy : this.strategies) { if (strategy.support(groovyScript)) { diff --git a/springboot-starter-script/src/main/java/com/codingapi/springboot/script/strategy/GroovyTypeFixStrategyContext.java b/springboot-starter-script/src/main/java/com/codingapi/springboot/script/strategy/GroovyTypeFixStrategyContext.java index e0708c12..e8ed6a8e 100644 --- a/springboot-starter-script/src/main/java/com/codingapi/springboot/script/strategy/GroovyTypeFixStrategyContext.java +++ b/springboot-starter-script/src/main/java/com/codingapi/springboot/script/strategy/GroovyTypeFixStrategyContext.java @@ -22,6 +22,12 @@ public void addFixStrategy(GroovyTypeFixStrategy gateway) { this.strategies.add(gateway); } + /** + * 清空策略 + */ + public void clear(){ + this.strategies.clear(); + } public void fix(GroovyScript groovyScript, Class clazz, GroovyType groovyType) { for (GroovyTypeFixStrategy strategy : strategies) { diff --git a/springboot-starter-script/src/main/java/com/codingapi/springboot/script/strategy/ScriptTypeMappingContext.java b/springboot-starter-script/src/main/java/com/codingapi/springboot/script/strategy/ScriptTypeMappingContext.java index e4a53be7..c9e30e33 100644 --- a/springboot-starter-script/src/main/java/com/codingapi/springboot/script/strategy/ScriptTypeMappingContext.java +++ b/springboot-starter-script/src/main/java/com/codingapi/springboot/script/strategy/ScriptTypeMappingContext.java @@ -28,6 +28,13 @@ public void addMapping(ScriptTypeMapping mapping){ } + /** + * 清空策略 + */ + public void clear(){ + this.mappings.clear(); + } + /** * 映射 diff --git a/springboot-starter-script/src/test/java/com/codingapi/springboot/script/GroovyScriptRuntimeContextTest.java b/springboot-starter-script/src/test/java/com/codingapi/springboot/script/GroovyScriptRuntimeContextTest.java index beefbf1f..96a681f6 100644 --- a/springboot-starter-script/src/test/java/com/codingapi/springboot/script/GroovyScriptRuntimeContextTest.java +++ b/springboot-starter-script/src/test/java/com/codingapi/springboot/script/GroovyScriptRuntimeContextTest.java @@ -3,13 +3,25 @@ import com.alibaba.fastjson.JSON; import com.codingapi.springboot.script.meta.GroovyMetadata; import com.codingapi.springboot.script.request.MyScriptRequest; +import com.codingapi.springboot.script.strategy.GroovyMetadataGenerateStrategyContext; +import com.codingapi.springboot.script.strategy.GroovyTypeFixStrategyContext; +import com.codingapi.springboot.script.strategy.ScriptTypeMappingContext; import org.apache.groovy.util.Maps; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; class GroovyScriptRuntimeContextTest { + + @BeforeEach + void beforeRun(){ + GroovyMetadataGenerateStrategyContext.getInstance().clear(); + GroovyTypeFixStrategyContext.getInstance().clear(); + ScriptTypeMappingContext.getInstance().clear(); + } + @Test void voidInvoke() { diff --git a/springboot-starter-script/src/test/java/com/codingapi/springboot/script/GroovyStrategyTest.java b/springboot-starter-script/src/test/java/com/codingapi/springboot/script/GroovyStrategyTest.java new file mode 100644 index 00000000..17dcf4e1 --- /dev/null +++ b/springboot-starter-script/src/test/java/com/codingapi/springboot/script/GroovyStrategyTest.java @@ -0,0 +1,125 @@ +package com.codingapi.springboot.script; + +import com.alibaba.fastjson.JSON; +import com.codingapi.springboot.script.meta.GroovyFunction; +import com.codingapi.springboot.script.meta.GroovyMetadata; +import com.codingapi.springboot.script.meta.GroovyType; +import com.codingapi.springboot.script.request.MyScriptRequest; +import com.codingapi.springboot.script.strategy.*; +import org.apache.groovy.util.Maps; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class GroovyStrategyTest { + + + @BeforeEach + void beforeRun(){ + GroovyMetadataGenerateStrategyContext.getInstance().clear(); + GroovyTypeFixStrategyContext.getInstance().clear(); + ScriptTypeMappingContext.getInstance().clear(); + } + + @Test + void test1(){ + String script = "def run(request){return request.count;}"; + + ScriptTypeMappingContext.getInstance().addMapping(new ScriptTypeMapping() { + @Override + public boolean support(Class target) { + return Integer.class.equals(target); + } + + @Override + public Class mapping(Class target) { + return int.class; + } + }); + + + GroovyTypeFixStrategyContext.getInstance().addFixStrategy(new GroovyTypeFixStrategy() { + @Override + public boolean support(Class clazz) { + return MyScriptRequest.class.equals(clazz); + } + + @Override + public void fix(GroovyScript groovyScript, GroovyType groovyType) { + GroovyFunction groovyFunction = new GroovyFunction(); + groovyFunction.setReturnType("int"); + groovyFunction.setName("hi"); + groovyFunction.setDescription("测试"); + groovyType.addFunction(groovyFunction); + } + }); + + + GroovyScript groovyScript = + GroovyScript.builder("metaTest") + .script(script) + .description("这是一个run函数,返回的格式为int类型。") + .method("run") + .tag("123") + .returnType(Integer.class) + .requests(Maps.of("request", MyScriptRequest.class)) + .build(); + + GroovyMetadata metadata = groovyScript.toMetadata(); + System.out.println(JSON.toJSONString(metadata)); + assertEquals(1, metadata.getRequests().size()); + assertEquals("int",metadata.getReturnType()); + assertEquals(3,metadata.getType("MyScriptRequest").getFunctions().size()); + + MyScriptRequest request = new MyScriptRequest(100); + long t1 = System.currentTimeMillis(); + int result = groovyScript.invoke(request); + long t2 = System.currentTimeMillis(); + System.out.println("groovy time:" + (t2 - t1)); + assertEquals(100, result); + } + + + + @Test + void test2(){ + String script = "def run(request){return request.count;}"; + + GroovyMetadataGenerateStrategyContext.getInstance().addGenerateStrategy(new GroovyMetadataGenerateStrategy() { + @Override + public boolean support(GroovyScript script) { + return true; + } + + @Override + public GroovyMetadata generate(GroovyScript script) { + return new GroovyMetadata("hello","int","hello"); + } + }); + + + GroovyScript groovyScript = + GroovyScript.builder("metaTest") + .script(script) + .description("这是一个run函数,返回的格式为int类型。") + .method("run") + .tag("123") + .returnType(Integer.class) + .requests(Maps.of("request", MyScriptRequest.class)) + .build(); + + GroovyMetadata metadata = groovyScript.toMetadata(); + System.out.println(JSON.toJSONString(metadata)); + assertEquals("int",metadata.getReturnType()); + assertEquals("hello",metadata.getDescription()); + assertEquals("hello",metadata.getMainMethod()); + + MyScriptRequest request = new MyScriptRequest(100); + long t1 = System.currentTimeMillis(); + int result = groovyScript.invoke(request); + long t2 = System.currentTimeMillis(); + System.out.println("groovy time:" + (t2 - t1)); + assertEquals(100, result); + } +} diff --git a/springboot-starter-script/src/test/java/com/codingapi/springboot/script/TransactionGroovyScriptRuntimeContextTest.java b/springboot-starter-script/src/test/java/com/codingapi/springboot/script/TransactionGroovyScriptRuntimeContextTest.java index 93295be0..bdf13401 100644 --- a/springboot-starter-script/src/test/java/com/codingapi/springboot/script/TransactionGroovyScriptRuntimeContextTest.java +++ b/springboot-starter-script/src/test/java/com/codingapi/springboot/script/TransactionGroovyScriptRuntimeContextTest.java @@ -3,7 +3,11 @@ import com.codingapi.springboot.script.entity.MyTest; import com.codingapi.springboot.script.repository.MyTestRepository; import com.codingapi.springboot.script.request.MyScriptRequest; +import com.codingapi.springboot.script.strategy.GroovyMetadataGenerateStrategyContext; +import com.codingapi.springboot.script.strategy.GroovyTypeFixStrategyContext; +import com.codingapi.springboot.script.strategy.ScriptTypeMappingContext; import org.apache.groovy.util.Maps; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @@ -21,6 +25,13 @@ class TransactionGroovyScriptRuntimeContextTest { @Autowired private MyTestRepository myTestRepository; + @BeforeEach + void beforeRun(){ + GroovyMetadataGenerateStrategyContext.getInstance().clear(); + GroovyTypeFixStrategyContext.getInstance().clear(); + ScriptTypeMappingContext.getInstance().clear(); + } + @Test void transactionCommitRun() { diff --git a/springboot-starter-security/pom.xml b/springboot-starter-security/pom.xml index b1e2fca9..0c69a141 100644 --- a/springboot-starter-security/pom.xml +++ b/springboot-starter-security/pom.xml @@ -6,7 +6,7 @@ com.codingapi.springboot springboot-parent - 2.10.52 + 2.10.53 springboot-starter-security diff --git a/springboot-starter/pom.xml b/springboot-starter/pom.xml index 63cd7b72..1761b906 100644 --- a/springboot-starter/pom.xml +++ b/springboot-starter/pom.xml @@ -5,7 +5,7 @@ com.codingapi.springboot springboot-parent - 2.10.52 + 2.10.53 springboot-starter