diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/core/FlowExecutor.java b/liteflow-core/src/main/java/com/yomahub/liteflow/core/FlowExecutor.java index 34e484cda..4a4d9031a 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/core/FlowExecutor.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/core/FlowExecutor.java @@ -662,8 +662,8 @@ public class FlowExecutor { boolean exist = lifeCycleList.stream() .anyMatch(lifeCycle -> lifeCycle instanceof RuleCacheLifeCycle); if (!exist) { - RuleCacheLifeCycle ruleCacheLifeCycle = new RuleCacheLifeCycle(capacity); - LifeCycleHolder.addLifeCycle(ruleCacheLifeCycle); + RuleCacheLifeCycle.initIfAbsent(capacity); + LifeCycleHolder.addLifeCycle(RuleCacheLifeCycle.getLifeCycle()); } // 执行时才解析chain liteflowConfig.setParseMode(ParseModeEnum.PARSE_ONE_ON_FIRST_EXEC); diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/lifecycle/impl/RuleCacheLifeCycle.java b/liteflow-core/src/main/java/com/yomahub/liteflow/lifecycle/impl/RuleCacheLifeCycle.java index c81be6551..67eb86bc3 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/lifecycle/impl/RuleCacheLifeCycle.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/lifecycle/impl/RuleCacheLifeCycle.java @@ -27,7 +27,12 @@ public class RuleCacheLifeCycle implements PostProcessChainExecuteLifeCycle { */ private final Cache cache; - public RuleCacheLifeCycle(int capacity) { + /** + * 实例 + */ + private static RuleCacheLifeCycle INSTANCE; + + private RuleCacheLifeCycle(int capacity) { this.cache = Caffeine.newBuilder() .maximumSize(capacity) .evictionListener(new ChainRemovalListener()) @@ -146,4 +151,22 @@ public class RuleCacheLifeCycle implements PostProcessChainExecuteLifeCycle { chain.setCompiled(false); chain.setConditionList(null); } + + /** + * 初始化生命周期实例 + * @param capacity 缓存容量 + */ + public synchronized static void initIfAbsent(int capacity) { + if (ObjectUtil.isNull(INSTANCE)) { + INSTANCE = new RuleCacheLifeCycle(capacity); + } + } + + /** + * 获取生命周期实例 + * @return lifeCycle + */ + public static RuleCacheLifeCycle getLifeCycle() { + return INSTANCE; + } } diff --git a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/ruleCache/RuleCacheTest.java b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/ruleCache/RuleCacheTest.java index 77a0f9e2d..1dedac580 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/ruleCache/RuleCacheTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-nospring/src/test/java/com/yomahub/liteflow/test/ruleCache/RuleCacheTest.java @@ -222,15 +222,7 @@ public class RuleCacheTest extends BaseTest { } public Cache getCache() { - List lifeCycleList - = LifeCycleHolder.getPostProcessChainExecuteLifeCycleList(); - for (PostProcessChainExecuteLifeCycle lifeCycle : lifeCycleList) { - if (lifeCycle.getClass().equals(RuleCacheLifeCycle.class)) { - RuleCacheLifeCycle ruleCacheLifeCycle = (RuleCacheLifeCycle) lifeCycle; - return ruleCacheLifeCycle.getCache(); - } - } - return null; + return RuleCacheLifeCycle.getLifeCycle().getCache(); } // 获得淘汰的chain,传入淘汰前的chain集合 diff --git a/liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/ruleCache/RuleCacheSolonTest.java b/liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/ruleCache/RuleCacheSolonTest.java index beb281ee0..392e70de7 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/ruleCache/RuleCacheSolonTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-solon/src/test/java/com/yomahub/liteflow/test/ruleCache/RuleCacheSolonTest.java @@ -215,15 +215,7 @@ public class RuleCacheSolonTest extends BaseTest { } public Cache getCache() { - List lifeCycleList - = LifeCycleHolder.getPostProcessChainExecuteLifeCycleList(); - for (PostProcessChainExecuteLifeCycle lifeCycle : lifeCycleList) { - if (lifeCycle.getClass().equals(RuleCacheLifeCycle.class)) { - RuleCacheLifeCycle ruleCacheLifeCycle = (RuleCacheLifeCycle) lifeCycle; - return ruleCacheLifeCycle.getCache(); - } - } - return null; + return RuleCacheLifeCycle.getLifeCycle().getCache(); } // 获得淘汰的chain,传入淘汰前的chain集合 diff --git a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/ruleCache/RuleCacheSpringbootTest.java b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/ruleCache/RuleCacheSpringbootTest.java index 3d75814f0..1611bb65d 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/ruleCache/RuleCacheSpringbootTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-springboot/src/test/java/com/yomahub/liteflow/test/ruleCache/RuleCacheSpringbootTest.java @@ -218,15 +218,7 @@ public class RuleCacheSpringbootTest extends BaseTest { } public Cache getCache() { - List lifeCycleList - = LifeCycleHolder.getPostProcessChainExecuteLifeCycleList(); - for (PostProcessChainExecuteLifeCycle lifeCycle : lifeCycleList) { - if (lifeCycle.getClass().equals(RuleCacheLifeCycle.class)) { - RuleCacheLifeCycle ruleCacheLifeCycle = (RuleCacheLifeCycle) lifeCycle; - return ruleCacheLifeCycle.getCache(); - } - } - return null; + return RuleCacheLifeCycle.getLifeCycle().getCache(); } // 获得淘汰的chain,传入淘汰前的chain集合 diff --git a/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/ruleCache/RuleCacheSpringTest.java b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/ruleCache/RuleCacheSpringTest.java index d97d82947..f76a1bc1a 100644 --- a/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/ruleCache/RuleCacheSpringTest.java +++ b/liteflow-testcase-el/liteflow-testcase-el-springnative/src/test/java/com/yomahub/liteflow/test/ruleCache/RuleCacheSpringTest.java @@ -215,15 +215,7 @@ public class RuleCacheSpringTest extends BaseTest { } public Cache getCache() { - List lifeCycleList - = LifeCycleHolder.getPostProcessChainExecuteLifeCycleList(); - for (PostProcessChainExecuteLifeCycle lifeCycle : lifeCycleList) { - if (lifeCycle.getClass().equals(RuleCacheLifeCycle.class)) { - RuleCacheLifeCycle ruleCacheLifeCycle = (RuleCacheLifeCycle) lifeCycle; - return ruleCacheLifeCycle.getCache(); - } - } - return null; + return RuleCacheLifeCycle.getLifeCycle().getCache(); } // 获得淘汰的chain,传入淘汰前的chain集合