diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/core/ScriptNodeComponent.java b/liteflow-core/src/main/java/com/yomahub/liteflow/core/ScriptNodeComponent.java index 7d7c322af..f9696e9a5 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/core/ScriptNodeComponent.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/core/ScriptNodeComponent.java @@ -1,6 +1,6 @@ package com.yomahub.liteflow.core; -import com.yomahub.liteflow.script.ScriptFactory; +import com.yomahub.liteflow.script.ScriptExecutorFactory; /** * 脚本组件类 @@ -11,10 +11,10 @@ public class ScriptNodeComponent extends NodeComponent{ @Override public void process() throws Exception { - ScriptFactory.loadInstance().getScriptExecutor().execute(getNodeId(), getSlotIndex()); + ScriptExecutorFactory.loadInstance().getScriptExecutor().execute(getNodeId(), getSlotIndex()); } public void loadScript(String script) { - ScriptFactory.loadInstance().getScriptExecutor().load(getNodeId(), script); + ScriptExecutorFactory.loadInstance().getScriptExecutor().load(getNodeId(), script); } } diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java index 7b2e4d558..6af50127d 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/FlowBus.java @@ -20,11 +20,13 @@ import com.yomahub.liteflow.exception.ComponentCannotRegisterException; import com.yomahub.liteflow.parser.LocalJsonFlowParser; import com.yomahub.liteflow.parser.LocalXmlFlowParser; import com.yomahub.liteflow.parser.LocalYmlFlowParser; +import com.yomahub.liteflow.script.ScriptExecutor; +import com.yomahub.liteflow.script.ScriptExecutorFactory; +import com.yomahub.liteflow.script.exception.ScriptSpiException; import com.yomahub.liteflow.util.SpringAware; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.lang.reflect.Proxy; import java.util.HashMap; import java.util.Map; @@ -119,6 +121,13 @@ public class FlowBus { public static void cleanCache() { chainMap.clear(); nodeMap.clear(); + //如果引入了脚本组件SPI,则还需要清理脚本的缓存 + try{ + ScriptExecutor scriptExecutor = ScriptExecutorFactory.loadInstance().getScriptExecutor(); + if (ObjectUtil.isNotNull(scriptExecutor)){ + scriptExecutor.cleanCache(); + } + }catch (ScriptSpiException e){} } //目前这种方式刷新不完全平滑 diff --git a/liteflow-script-common/src/main/java/com/yomahub/liteflow/script/ScriptExecutor.java b/liteflow-script-common/src/main/java/com/yomahub/liteflow/script/ScriptExecutor.java index a38a2de26..acacbceff 100644 --- a/liteflow-script-common/src/main/java/com/yomahub/liteflow/script/ScriptExecutor.java +++ b/liteflow-script-common/src/main/java/com/yomahub/liteflow/script/ScriptExecutor.java @@ -1,7 +1,7 @@ package com.yomahub.liteflow.script; /** - * 脚本执行器 + * 脚本执行器接口 * @author Bryan.Zhang * @since 2.5.11 */ @@ -12,4 +12,6 @@ public interface ScriptExecutor { void load(String nodeId, String script); void execute(String nodeId, int slotIndex); + + void cleanCache(); } diff --git a/liteflow-script-common/src/main/java/com/yomahub/liteflow/script/ScriptFactory.java b/liteflow-script-common/src/main/java/com/yomahub/liteflow/script/ScriptExecutorFactory.java similarity index 65% rename from liteflow-script-common/src/main/java/com/yomahub/liteflow/script/ScriptFactory.java rename to liteflow-script-common/src/main/java/com/yomahub/liteflow/script/ScriptExecutorFactory.java index 5d0a0494f..dfe32f546 100644 --- a/liteflow-script-common/src/main/java/com/yomahub/liteflow/script/ScriptFactory.java +++ b/liteflow-script-common/src/main/java/com/yomahub/liteflow/script/ScriptExecutorFactory.java @@ -5,17 +5,22 @@ import com.yomahub.liteflow.script.exception.ScriptSpiException; import java.util.ServiceLoader; -public class ScriptFactory { +/** + * 脚本执行器工厂类 + * @author Bryan.Zhang + * @since 2.5.11 + */ +public class ScriptExecutorFactory { - private static ScriptFactory scriptFactory; + private static ScriptExecutorFactory scriptExecutorFactory; private ScriptExecutor scriptExecutor; - public static ScriptFactory loadInstance(){ - if (ObjectUtil.isNull(scriptFactory)){ - scriptFactory = new ScriptFactory(); + public static ScriptExecutorFactory loadInstance(){ + if (ObjectUtil.isNull(scriptExecutorFactory)){ + scriptExecutorFactory = new ScriptExecutorFactory(); } - return scriptFactory; + return scriptExecutorFactory; } public ScriptExecutor getScriptExecutor(){ 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 29b11a33f..d7c43a7fc 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 @@ -52,4 +52,9 @@ public class QLExpressScriptExecutor implements ScriptExecutor { throw new ScriptExecuteException(errorMsg); } } + + @Override + public void cleanCache() { + expressRunner.clearExpressCache(); + } }