mirror of
https://gitee.com/dromara/liteFlow.git
synced 2026-05-14 04:02:09 +08:00
enhancement #I8FC4F 超大量规则场景下项目启动时间过长的问题
This commit is contained in:
@@ -27,6 +27,8 @@ import com.yomahub.liteflow.log.LFLoggerManager;
|
||||
import com.yomahub.liteflow.parser.el.LocalJsonFlowELParser;
|
||||
import com.yomahub.liteflow.parser.el.LocalXmlFlowELParser;
|
||||
import com.yomahub.liteflow.parser.el.LocalYmlFlowELParser;
|
||||
import com.yomahub.liteflow.property.LiteflowConfig;
|
||||
import com.yomahub.liteflow.property.LiteflowConfigGetter;
|
||||
import com.yomahub.liteflow.script.ScriptExecutorFactory;
|
||||
import com.yomahub.liteflow.script.exception.ScriptLoadException;
|
||||
import com.yomahub.liteflow.script.exception.ScriptSpiException;
|
||||
@@ -36,10 +38,7 @@ import com.yomahub.liteflow.spi.holder.DeclComponentParserHolder;
|
||||
import com.yomahub.liteflow.util.CopyOnWriteHashMap;
|
||||
import com.yomahub.liteflow.core.proxy.LiteFlowProxyUtil;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -53,15 +52,25 @@ public class FlowBus {
|
||||
|
||||
private static final LFLog LOG = LFLoggerManager.getLogger(FlowBus.class);
|
||||
|
||||
private static final Map<String, Chain> chainMap = new CopyOnWriteHashMap<>();
|
||||
private static final Map<String, Chain> chainMap;
|
||||
|
||||
private static final Map<String, Node> nodeMap = new CopyOnWriteHashMap<>();
|
||||
private static final Map<String, Node> nodeMap;
|
||||
|
||||
private static final Map<NodeTypeEnum, Node> fallbackNodeMap = new CopyOnWriteHashMap<>();
|
||||
private static final Map<NodeTypeEnum, Node> fallbackNodeMap;
|
||||
|
||||
private static AtomicBoolean initStat = new AtomicBoolean(false);
|
||||
|
||||
private FlowBus() {
|
||||
static {
|
||||
LiteflowConfig liteflowConfig = LiteflowConfigGetter.get();
|
||||
if (liteflowConfig.getFastLoad()){
|
||||
chainMap = new HashMap<>();
|
||||
nodeMap = new HashMap<>();
|
||||
fallbackNodeMap = new HashMap<>();
|
||||
}else{
|
||||
chainMap = new CopyOnWriteHashMap<>();
|
||||
nodeMap = new CopyOnWriteHashMap<>();
|
||||
fallbackNodeMap = new CopyOnWriteHashMap<>();
|
||||
}
|
||||
}
|
||||
|
||||
public static Chain getChain(String id) {
|
||||
|
||||
@@ -115,6 +115,9 @@ public class LiteflowConfig {
|
||||
// 是否启用组件降级
|
||||
private Boolean fallbackCmpEnable;
|
||||
|
||||
//是否快速加载规则,如果快速加载规则意味着不用copyOnWrite机制了
|
||||
private Boolean fastLoad;
|
||||
|
||||
public Boolean getEnableMonitorFile() {
|
||||
return enableMonitorFile;
|
||||
}
|
||||
@@ -452,7 +455,7 @@ public class LiteflowConfig {
|
||||
|
||||
public Boolean getFallbackCmpEnable() {
|
||||
if (ObjectUtil.isNull(this.fallbackCmpEnable)) {
|
||||
return false;
|
||||
return Boolean.FALSE;
|
||||
} else {
|
||||
return fallbackCmpEnable;
|
||||
}
|
||||
@@ -474,4 +477,17 @@ public class LiteflowConfig {
|
||||
public void setWhenThreadPoolIsolate(Boolean whenThreadPoolIsolate) {
|
||||
this.whenThreadPoolIsolate = whenThreadPoolIsolate;
|
||||
}
|
||||
|
||||
public Boolean getFastLoad() {
|
||||
if (ObjectUtil.isNull(fastLoad)) {
|
||||
return Boolean.FALSE;
|
||||
}
|
||||
else {
|
||||
return fastLoad;
|
||||
}
|
||||
}
|
||||
|
||||
public void setFastLoad(Boolean fastLoad) {
|
||||
this.fastLoad = fastLoad;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -78,24 +78,27 @@ public class LiteflowProperty {
|
||||
private boolean printExecutionLog;
|
||||
|
||||
// 规则文件/脚本文件变更监听
|
||||
private Boolean enableMonitorFile;
|
||||
private boolean enableMonitorFile;
|
||||
|
||||
private String parallelLoopExecutorClass;
|
||||
|
||||
//使用默认并行循环线程池时,最大线程数
|
||||
private Integer parallelMaxWorkers;
|
||||
private int parallelMaxWorkers;
|
||||
|
||||
//使用默认并行循环线程池时,最大队列数
|
||||
private Integer parallelQueueLimit;
|
||||
private int parallelQueueLimit;
|
||||
|
||||
// 是否启用组件降级
|
||||
private Boolean fallbackCmpEnable;
|
||||
private boolean fallbackCmpEnable;
|
||||
|
||||
public Boolean getEnableMonitorFile() {
|
||||
//是否快速加载规则,如果快速加载规则意味着不用copyOnWrite机制了
|
||||
private boolean fastLoad;
|
||||
|
||||
public boolean isEnableMonitorFile() {
|
||||
return enableMonitorFile;
|
||||
}
|
||||
|
||||
public void setEnableMonitorFile(Boolean enableMonitorFile) {
|
||||
public void setEnableMonitorFile(boolean enableMonitorFile) {
|
||||
this.enableMonitorFile = enableMonitorFile;
|
||||
}
|
||||
|
||||
@@ -269,27 +272,27 @@ public class LiteflowProperty {
|
||||
this.parallelLoopExecutorClass = parallelLoopExecutorClass;
|
||||
}
|
||||
|
||||
public Integer getParallelMaxWorkers() {
|
||||
public int getParallelMaxWorkers() {
|
||||
return parallelMaxWorkers;
|
||||
}
|
||||
|
||||
public void setParallelMaxWorkers(Integer parallelMaxWorkers) {
|
||||
public void setParallelMaxWorkers(int parallelMaxWorkers) {
|
||||
this.parallelMaxWorkers = parallelMaxWorkers;
|
||||
}
|
||||
|
||||
public Integer getParallelQueueLimit() {
|
||||
public int getParallelQueueLimit() {
|
||||
return parallelQueueLimit;
|
||||
}
|
||||
|
||||
public void setParallelQueueLimit(Integer parallelQueueLimit) {
|
||||
public void setParallelQueueLimit(int parallelQueueLimit) {
|
||||
this.parallelQueueLimit = parallelQueueLimit;
|
||||
}
|
||||
|
||||
public Boolean isFallbackCmpEnable() {
|
||||
|
||||
public boolean isFallbackCmpEnable() {
|
||||
return fallbackCmpEnable;
|
||||
}
|
||||
|
||||
public void setFallbackCmpEnable(Boolean fallbackCmpEnable) {
|
||||
|
||||
public void setFallbackCmpEnable(boolean fallbackCmpEnable) {
|
||||
this.fallbackCmpEnable = fallbackCmpEnable;
|
||||
}
|
||||
|
||||
@@ -300,4 +303,12 @@ public class LiteflowProperty {
|
||||
public void setWhenThreadPoolIsolate(boolean whenThreadPoolIsolate) {
|
||||
this.whenThreadPoolIsolate = whenThreadPoolIsolate;
|
||||
}
|
||||
|
||||
public boolean isFastLoad() {
|
||||
return fastLoad;
|
||||
}
|
||||
|
||||
public void setFastLoad(boolean fastLoad) {
|
||||
this.fastLoad = fastLoad;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -43,11 +43,12 @@ public class LiteflowPropertyAutoConfiguration {
|
||||
liteflowConfig.setMainExecutorWorks(property.getMainExecutorWorks());
|
||||
liteflowConfig.setMainExecutorClass(property.getMainExecutorClass());
|
||||
liteflowConfig.setPrintExecutionLog(property.isPrintExecutionLog());
|
||||
liteflowConfig.setEnableMonitorFile(property.getEnableMonitorFile());
|
||||
liteflowConfig.setEnableMonitorFile(property.isEnableMonitorFile());
|
||||
liteflowConfig.setParallelMaxWorkers(property.getParallelMaxWorkers());
|
||||
liteflowConfig.setParallelQueueLimit(property.getParallelQueueLimit());
|
||||
liteflowConfig.setParallelLoopExecutorClass(property.getParallelLoopExecutorClass());
|
||||
liteflowConfig.setFallbackCmpEnable(property.isFallbackCmpEnable());
|
||||
liteflowConfig.setFastLoad(property.isFastLoad());
|
||||
liteflowConfig.setEnableLog(liteflowMonitorProperty.isEnableLog());
|
||||
liteflowConfig.setQueueLimit(liteflowMonitorProperty.getQueueLimit());
|
||||
liteflowConfig.setDelay(liteflowMonitorProperty.getDelay());
|
||||
|
||||
@@ -145,6 +145,20 @@
|
||||
"sourceType": "com.yomahub.liteflow.springboot.LiteflowProperty",
|
||||
"defaultValue": true
|
||||
},
|
||||
{
|
||||
"name": "liteflow.fallback-cmp-enable",
|
||||
"type": "java.lang.Boolean",
|
||||
"description": "Whether to enable component fallback.",
|
||||
"sourceType": "com.yomahub.liteflow.springboot.LiteflowProperty",
|
||||
"defaultValue": false
|
||||
},
|
||||
{
|
||||
"name": "liteflow.fast-load",
|
||||
"type": "java.lang.Boolean",
|
||||
"description": "Whether to enable fast load mode.",
|
||||
"sourceType": "com.yomahub.liteflow.springboot.LiteflowProperty",
|
||||
"defaultValue": false
|
||||
},
|
||||
{
|
||||
"name": "liteflow.monitor.enable-log",
|
||||
"type": "java.lang.Boolean",
|
||||
|
||||
@@ -15,7 +15,8 @@ liteflow.retry-count=0
|
||||
liteflow.support-multiple-type=false
|
||||
liteflow.node-executor-class=com.yomahub.liteflow.flow.executor.DefaultNodeExecutor
|
||||
liteflow.print-execution-log=true
|
||||
liteflow.substitute-cmp-class=
|
||||
liteflow.fallback-cmp-enable=false
|
||||
liteflow.fast-load=false
|
||||
liteflow.parallel-max-workers=16
|
||||
liteflow.parallel-queue-limit=512
|
||||
liteflow.parallel-loop-executor-class=com.yomahub.liteflow.thread.LiteFlowDefaultParallelLoopExecutorBuilder
|
||||
|
||||
Reference in New Issue
Block a user