From e4cebf0cee01f765a6fcf3c60e31bbd1ecb10c42 Mon Sep 17 00:00:00 2001 From: sikadai <466608943@qq.com> Date: Thu, 10 Feb 2022 20:17:37 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4class=E7=94=9F=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../yomahub/liteflow/core/ComponentInitializer.java | 13 ++++++++++++- .../com/yomahub/liteflow/core/NodeComponent.java | 6 +++--- .../entity/executor/NodeExecutorHelper.java | 8 ++++---- .../resources/META-INF/liteflow-default.properties | 3 ++- 4 files changed, 21 insertions(+), 9 deletions(-) diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/core/ComponentInitializer.java b/liteflow-core/src/main/java/com/yomahub/liteflow/core/ComponentInitializer.java index 7d18ea7cb..c858050ce 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/core/ComponentInitializer.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/core/ComponentInitializer.java @@ -4,6 +4,7 @@ import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.yomahub.liteflow.annotation.LiteflowComponent; import com.yomahub.liteflow.annotation.LiteflowRetry; +import com.yomahub.liteflow.entity.executor.NodeExecutor; import com.yomahub.liteflow.enums.NodeTypeEnum; import com.yomahub.liteflow.property.LiteflowConfig; import com.yomahub.liteflow.property.LiteflowConfigGetter; @@ -54,8 +55,18 @@ public class ComponentInitializer { } else { nodeComponent.setRetryCount(liteflowConfig.getRetryCount()); } - nodeComponent.setNodeExecutorClass(liteflowConfig.getNodeExecutorClass()); + nodeComponent.setNodeExecutorClass(buildNodeExecutorClass(liteflowConfig)); return nodeComponent; } + + private Class buildNodeExecutorClass(LiteflowConfig liteflowConfig) { + Class nodeExecutorClass; + try { + nodeExecutorClass = Class.forName(liteflowConfig.getNodeExecutorClass()); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e.getMessage()); + } + return (Class) nodeExecutorClass; + } } diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeComponent.java b/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeComponent.java index 506b6db00..d09cae0d1 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeComponent.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/core/NodeComponent.java @@ -63,7 +63,7 @@ public abstract class NodeComponent{ private Class[] retryForExceptions = new Class[]{Exception.class}; /** 节点执行器的类全名 */ - private String nodeExecutorClass = DefaultNodeExecutor.class.getName(); + private Class nodeExecutorClass = DefaultNodeExecutor.class; //是否结束整个流程,这个只对串行流程有效,并行流程无效 @@ -234,11 +234,11 @@ public abstract class NodeComponent{ this.retryForExceptions = retryForExceptions; } - public String getNodeExecutorClass() { + public Class getNodeExecutorClass() { return nodeExecutorClass; } - public void setNodeExecutorClass(String nodeExecutorClass) { + public void setNodeExecutorClass(Class nodeExecutorClass) { this.nodeExecutorClass = nodeExecutorClass; } diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/executor/NodeExecutorHelper.java b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/executor/NodeExecutorHelper.java index f507ed105..219ce6af7 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/entity/executor/NodeExecutorHelper.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/entity/executor/NodeExecutorHelper.java @@ -18,7 +18,7 @@ public class NodeExecutorHelper { * key - 节点执行器类Class全名 * value - 节点执行器对象 */ - private final Map nodeExecutorMap; + private final Map, NodeExecutor> nodeExecutorMap; private NodeExecutorHelper() { nodeExecutorMap = Maps.newConcurrentMap(); @@ -49,11 +49,11 @@ public class NodeExecutorHelper { * @param nodeExecutorClass : 节点执行器的Class * @return */ - public NodeExecutor buildNodeExecutor(String nodeExecutorClass) { + public NodeExecutor buildNodeExecutor(Class nodeExecutorClass) { // 高频操作-采取apache判空操作-效率高于hotool的isBlank将近3倍 - if (StringUtils.isBlank(nodeExecutorClass)) { + if (nodeExecutorClass == null) { // 此处使用默认的节点执行器进行执行 - nodeExecutorClass = DefaultNodeExecutor.class.getName(); + nodeExecutorClass = DefaultNodeExecutor.class; } NodeExecutor nodeExecutor = nodeExecutorMap.get(nodeExecutorClass); // 此处无需使用同步锁进行同步-因为即使同时创建了两个实例,但是添加到缓存中的只会存在一个且不会存在并发问题-具体是由ConcurrentMap保证 diff --git a/liteflow-spring-boot-starter/src/main/resources/META-INF/liteflow-default.properties b/liteflow-spring-boot-starter/src/main/resources/META-INF/liteflow-default.properties index d91ff3337..3140e99e4 100644 --- a/liteflow-spring-boot-starter/src/main/resources/META-INF/liteflow-default.properties +++ b/liteflow-spring-boot-starter/src/main/resources/META-INF/liteflow-default.properties @@ -12,4 +12,5 @@ liteflow.support-multiple-type=false liteflow.monitor.enable-log=false liteflow.monitor.queue-limit=200 liteflow.monitor.delay=300000 -liteflow.monitor.period=300000 \ No newline at end of file +liteflow.monitor.period=300000 +liteflow.node-executor-class=com.yomahub.liteflow.entity.executor.DefaultNodeExecutor \ No newline at end of file