diff --git a/liteflow-core/pom.xml b/liteflow-core/pom.xml index 80149c804..84d8ce59b 100644 --- a/liteflow-core/pom.xml +++ b/liteflow-core/pom.xml @@ -9,7 +9,7 @@ com.yomahub liteflow - 2.6.0 + 2.6.1 diff --git a/liteflow-script-common/pom.xml b/liteflow-script-common/pom.xml index c392952f1..59a493a91 100644 --- a/liteflow-script-common/pom.xml +++ b/liteflow-script-common/pom.xml @@ -5,7 +5,7 @@ liteflow com.yomahub - 2.6.0 + 2.6.1 4.0.0 diff --git a/liteflow-script-groovy/pom.xml b/liteflow-script-groovy/pom.xml index c1baeedd2..13763d6f1 100644 --- a/liteflow-script-groovy/pom.xml +++ b/liteflow-script-groovy/pom.xml @@ -5,7 +5,7 @@ liteflow com.yomahub - 2.6.0 + 2.6.1 4.0.0 diff --git a/liteflow-script-groovy/src/main/java/com/yomahub/liteflow/script/groovy/GroovyScriptExecutor.java b/liteflow-script-groovy/src/main/java/com/yomahub/liteflow/script/groovy/GroovyScriptExecutor.java index a64a7910a..518d8a35a 100644 --- a/liteflow-script-groovy/src/main/java/com/yomahub/liteflow/script/groovy/GroovyScriptExecutor.java +++ b/liteflow-script-groovy/src/main/java/com/yomahub/liteflow/script/groovy/GroovyScriptExecutor.java @@ -41,7 +41,7 @@ public class GroovyScriptExecutor implements ScriptExecutor { compiledScriptMap.put(nodeId, compiledScript); } }catch (Exception e){ - String errorMsg = StrUtil.format("script loading error for node[{}]", nodeId); + String errorMsg = StrUtil.format("script loading error for node[{}], error msg:{}", nodeId, e.getMessage()); throw new ScriptLoadException(errorMsg); } diff --git a/liteflow-script-qlexpress/pom.xml b/liteflow-script-qlexpress/pom.xml index e23e99b01..a9a9a626b 100644 --- a/liteflow-script-qlexpress/pom.xml +++ b/liteflow-script-qlexpress/pom.xml @@ -5,7 +5,7 @@ liteflow com.yomahub - 2.6.0 + 2.6.1 4.0.0 diff --git a/liteflow-script-qlexpress/src/main/java/com/yomahub/liteflow/script/qlexpress/QLExpressScriptExecutor.java b/liteflow-script-qlexpress/src/main/java/com/yomahub/liteflow/script/qlexpress/QLExpressScriptExecutor.java index c38a7365e..0bab4d843 100644 --- a/liteflow-script-qlexpress/src/main/java/com/yomahub/liteflow/script/qlexpress/QLExpressScriptExecutor.java +++ b/liteflow-script-qlexpress/src/main/java/com/yomahub/liteflow/script/qlexpress/QLExpressScriptExecutor.java @@ -1,7 +1,10 @@ package com.yomahub.liteflow.script.qlexpress; +import cn.hutool.core.io.resource.ResourceUtil; +import cn.hutool.core.util.ReflectUtil; import cn.hutool.core.util.StrUtil; import com.ql.util.express.DefaultContext; +import com.ql.util.express.ExpressLoader; import com.ql.util.express.ExpressRunner; import com.yomahub.liteflow.entity.data.DataBus; import com.yomahub.liteflow.entity.data.Slot; @@ -36,7 +39,7 @@ public class QLExpressScriptExecutor implements ScriptExecutor { try{ expressRunner.loadMutilExpress(nodeId, script); }catch (Exception e){ - String errorMsg = StrUtil.format("script loading error for node[{}]", nodeId); + String errorMsg = StrUtil.format("script loading error for node[{}],error msg:{}", nodeId, e.getMessage()); throw new ScriptLoadException(errorMsg); } } @@ -46,7 +49,7 @@ public class QLExpressScriptExecutor implements ScriptExecutor { List errorList = new ArrayList<>(); try{ Slot slot = DataBus.getSlot(slotIndex); - DefaultContext context = new DefaultContext(); + DefaultContext context = new DefaultContext<>(); context.put("slot", slot); return expressRunner.executeByExpressName(nodeId, context, errorList, true, false, null); }catch (Exception e){ @@ -61,5 +64,6 @@ public class QLExpressScriptExecutor implements ScriptExecutor { @Override public void cleanCache() { expressRunner.clearExpressCache(); + ReflectUtil.setFieldValue(expressRunner,"loader",new ExpressLoader(expressRunner)); } } diff --git a/liteflow-spring-boot-starter/pom.xml b/liteflow-spring-boot-starter/pom.xml index f870f22b7..d2e4c1f14 100644 --- a/liteflow-spring-boot-starter/pom.xml +++ b/liteflow-spring-boot-starter/pom.xml @@ -10,7 +10,7 @@ liteflow com.yomahub - 2.6.0 + 2.6.1 diff --git a/liteflow-testcase-script-groovy/pom.xml b/liteflow-testcase-script-groovy/pom.xml index 4085f712d..0de155ef9 100644 --- a/liteflow-testcase-script-groovy/pom.xml +++ b/liteflow-testcase-script-groovy/pom.xml @@ -5,7 +5,7 @@ liteflow com.yomahub - 2.6.0 + 2.6.1 4.0.0 diff --git a/liteflow-testcase-script-groovy/src/test/java/com/yomahub/liteflow/test/script/groovy/LiteflowScriptGroovyTest.java b/liteflow-testcase-script-groovy/src/test/java/com/yomahub/liteflow/test/script/groovy/LiteflowScriptGroovyTest.java index b4dce59f5..fff40be3c 100644 --- a/liteflow-testcase-script-groovy/src/test/java/com/yomahub/liteflow/test/script/groovy/LiteflowScriptGroovyTest.java +++ b/liteflow-testcase-script-groovy/src/test/java/com/yomahub/liteflow/test/script/groovy/LiteflowScriptGroovyTest.java @@ -1,8 +1,11 @@ package com.yomahub.liteflow.test.script.groovy; +import cn.hutool.core.io.resource.ResourceUtil; import com.yomahub.liteflow.core.FlowExecutor; import com.yomahub.liteflow.entity.data.DefaultSlot; import com.yomahub.liteflow.entity.data.LiteflowResponse; +import com.yomahub.liteflow.enums.FlowParserTypeEnum; +import com.yomahub.liteflow.flow.FlowBus; import com.yomahub.liteflow.test.BaseTest; import org.junit.Assert; import org.junit.Test; @@ -46,4 +49,22 @@ public class LiteflowScriptGroovyTest extends BaseTest { Assert.assertTrue(response.isSuccess()); Assert.assertEquals("d==>s2[条件脚本]==>a", response.getSlot().printStep()); } + + //测试脚本的热重载 + @Test + public void testScript3() throws Exception{ + //根据配置,加载的应该是flow.xml,执行原来的规则 + LiteflowResponse responseOld = flowExecutor.execute2Resp("chain2", "arg"); + Assert.assertTrue(responseOld.isSuccess()); + Assert.assertEquals("d==>s2[条件脚本]==>a", responseOld.getSlot().printStep()); + //更改规则,重新加载,更改的规则内容从flow_update.xml里读取,这里只是为了模拟下获取新的内容。不一定是从文件中读取 + String newContent = ResourceUtil.readUtf8Str("classpath: /script/flow_update.xml"); + //进行刷新 + FlowBus.refreshFlowMetaData(FlowParserTypeEnum.TYPE_XML, newContent); + + //重新执行chain2这个链路,结果会变 + LiteflowResponse responseNew = flowExecutor.execute2Resp("chain2", "arg"); + Assert.assertTrue(responseNew.isSuccess()); + Assert.assertEquals("d==>s2[条件脚本_改]==>b==>s3[普通脚本_新增]", responseNew.getSlot().printStep()); + } } diff --git a/liteflow-testcase-script-groovy/src/test/resources/script/flow_update.xml b/liteflow-testcase-script-groovy/src/test/resources/script/flow_update.xml new file mode 100644 index 000000000..bc38a9913 --- /dev/null +++ b/liteflow-testcase-script-groovy/src/test/resources/script/flow_update.xml @@ -0,0 +1,40 @@ + + + + + + + + + 150){ + return "b"; + }else{ + return "a"; + } + ]]> + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/liteflow-testcase-script-qlexpress/pom.xml b/liteflow-testcase-script-qlexpress/pom.xml index 6ebc6fd00..935483108 100644 --- a/liteflow-testcase-script-qlexpress/pom.xml +++ b/liteflow-testcase-script-qlexpress/pom.xml @@ -5,7 +5,7 @@ liteflow com.yomahub - 2.6.0 + 2.6.1 4.0.0 diff --git a/liteflow-testcase-script-qlexpress/src/test/java/com/yomahub/liteflow/test/script/qlexpress/LiteflowScriptQLExpressTest.java b/liteflow-testcase-script-qlexpress/src/test/java/com/yomahub/liteflow/test/script/qlexpress/LiteflowScriptQLExpressTest.java index 3b1365d31..996a384db 100644 --- a/liteflow-testcase-script-qlexpress/src/test/java/com/yomahub/liteflow/test/script/qlexpress/LiteflowScriptQLExpressTest.java +++ b/liteflow-testcase-script-qlexpress/src/test/java/com/yomahub/liteflow/test/script/qlexpress/LiteflowScriptQLExpressTest.java @@ -1,8 +1,11 @@ package com.yomahub.liteflow.test.script.qlexpress; +import cn.hutool.core.io.resource.ResourceUtil; import com.yomahub.liteflow.core.FlowExecutor; import com.yomahub.liteflow.entity.data.DefaultSlot; import com.yomahub.liteflow.entity.data.LiteflowResponse; +import com.yomahub.liteflow.enums.FlowParserTypeEnum; +import com.yomahub.liteflow.flow.FlowBus; import com.yomahub.liteflow.test.BaseTest; import org.junit.Assert; import org.junit.Test; @@ -46,4 +49,21 @@ public class LiteflowScriptQLExpressTest extends BaseTest { Assert.assertTrue(response.isSuccess()); Assert.assertEquals("d==>s2[条件脚本]==>b", response.getSlot().printStep()); } + + @Test + public void testScript3() throws Exception{ + //根据配置,加载的应该是flow.xml,执行原来的规则 + LiteflowResponse responseOld = flowExecutor.execute2Resp("chain2", "arg"); + Assert.assertTrue(responseOld.isSuccess()); + Assert.assertEquals("d==>s2[条件脚本]==>b", responseOld.getSlot().printStep()); + //更改规则,重新加载,更改的规则内容从flow_update.xml里读取,这里只是为了模拟下获取新的内容。不一定是从文件中读取 + String newContent = ResourceUtil.readUtf8Str("classpath: /script/flow_update.xml"); + //进行刷新 + FlowBus.refreshFlowMetaData(FlowParserTypeEnum.TYPE_XML, newContent); + + //重新执行chain2这个链路,结果会变 + LiteflowResponse responseNew = flowExecutor.execute2Resp("chain2", "arg"); + Assert.assertTrue(responseNew.isSuccess()); + Assert.assertEquals("d==>s2[条件脚本_改]==>a==>s3[普通脚本_新增]", responseNew.getSlot().printStep()); + } } diff --git a/liteflow-testcase-script-qlexpress/src/test/resources/script/flow_update.xml b/liteflow-testcase-script-qlexpress/src/test/resources/script/flow_update.xml new file mode 100644 index 000000000..8b6d44e73 --- /dev/null +++ b/liteflow-testcase-script-qlexpress/src/test/resources/script/flow_update.xml @@ -0,0 +1,40 @@ + + + + + + + + + 150){ + return "b"; + }else{ + return "a"; + } + ]]> + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/liteflow-testcase-springboot/pom.xml b/liteflow-testcase-springboot/pom.xml index a3d06bcaa..7a40bc38d 100644 --- a/liteflow-testcase-springboot/pom.xml +++ b/liteflow-testcase-springboot/pom.xml @@ -5,7 +5,7 @@ liteflow com.yomahub - 2.6.0 + 2.6.1 4.0.0 diff --git a/liteflow-testcase-springnative/pom.xml b/liteflow-testcase-springnative/pom.xml index 8df8a997f..4a815adc7 100644 --- a/liteflow-testcase-springnative/pom.xml +++ b/liteflow-testcase-springnative/pom.xml @@ -5,7 +5,7 @@ liteflow com.yomahub - 2.6.0 + 2.6.1 4.0.0 diff --git a/pom.xml b/pom.xml index 0d8fefe85..d76ef4484 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ com.yomahub liteflow pom - 2.6.0 + 2.6.1 liteflow a lightweight and practical micro-process framework https://github.com/bryan31/liteflow