mirror of
https://gitee.com/dromara/liteFlow.git
synced 2026-05-16 13:00:41 +08:00
feature #I44FT8 支持脚本语言的组件,并支持动态刷新脚本(版本特性)
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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){}
|
||||
}
|
||||
|
||||
//目前这种方式刷新不完全平滑
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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(){
|
||||
@@ -52,4 +52,9 @@ public class QLExpressScriptExecutor implements ScriptExecutor {
|
||||
throw new ScriptExecuteException(errorMsg);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cleanCache() {
|
||||
expressRunner.clearExpressCache();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user