diff --git a/liteflow-core/pom.xml b/liteflow-core/pom.xml index a61ce18fb..f4ee22e05 100644 --- a/liteflow-core/pom.xml +++ b/liteflow-core/pom.xml @@ -23,26 +23,6 @@ cn.hutool hutool-core - - org.springframework - spring-beans - - - org.springframework - spring-context - - - org.springframework - spring-aop - - - org.springframework - spring-expression - - - org.springframework - spring-test - org.slf4j slf4j-api diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/annotation/AliasFor.java b/liteflow-core/src/main/java/com/yomahub/liteflow/annotation/AliasFor.java new file mode 100644 index 000000000..06b3c58c4 --- /dev/null +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/annotation/AliasFor.java @@ -0,0 +1,11 @@ +package com.yomahub.liteflow.annotation; + +import java.lang.annotation.*; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +@Documented +public @interface AliasFor { + + String value() default ""; +} diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/annotation/LiteflowRetry.java b/liteflow-core/src/main/java/com/yomahub/liteflow/annotation/LiteflowRetry.java index 26c7e4032..7f4ca10ea 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/annotation/LiteflowRetry.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/annotation/LiteflowRetry.java @@ -1,7 +1,5 @@ package com.yomahub.liteflow.annotation; -import org.springframework.core.annotation.AliasFor; - import java.lang.annotation.*; /** diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/annotation/util/AnnoUtil.java b/liteflow-core/src/main/java/com/yomahub/liteflow/annotation/util/AnnoUtil.java new file mode 100644 index 000000000..a7af0f06d --- /dev/null +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/annotation/util/AnnoUtil.java @@ -0,0 +1,50 @@ +package com.yomahub.liteflow.annotation.util; + +import cn.hutool.core.annotation.AnnotationUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.ReflectUtil; +import com.yomahub.liteflow.annotation.AliasFor; + +import java.lang.annotation.Annotation; +import java.lang.reflect.AnnotatedElement; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + +public class AnnoUtil { + + public static A getAnnotation(AnnotatedElement annotatedElement, Class annotationType) { + A annotation = AnnotationUtil.getAnnotation(annotatedElement, annotationType); + if (ObjectUtil.isNull(annotation)){ + return null; + } + + Map aliasMap = new HashMap<>(); + Map defaultValueMap = new HashMap<>(); + Arrays.stream(ReflectUtil.getMethods(annotationType)).forEach(method -> { + AliasFor aliasFor = AnnotationUtil.getAnnotation(method, AliasFor.class); + if (ObjectUtil.isNotNull(aliasFor)){ + aliasMap.put(method.getName(), aliasFor.value()); + defaultValueMap.put(method.getName(), getDefaultValue(annotationType, method.getName())); + } + }); + + aliasMap.forEach((key, value1) -> { + Object value = ReflectUtil.invoke(annotation, key); + Object defaultValue = defaultValueMap.get(key); + if (ObjectUtil.notEqual(value, defaultValue)) { + AnnotationUtil.setValue(annotation, value1, value); + } + }); + + return annotation; + } + + public static Object getDefaultValue(Class annotationType, String property){ + try{ + return annotationType.getMethod(property).getDefaultValue(); + }catch (Exception e){ + return null; + } + } +} diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/builder/LiteFlowConditionBuilder.java b/liteflow-core/src/main/java/com/yomahub/liteflow/builder/LiteFlowConditionBuilder.java index 9c7178dd5..f9f4aed2f 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/builder/LiteFlowConditionBuilder.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/builder/LiteFlowConditionBuilder.java @@ -11,7 +11,7 @@ import com.yomahub.liteflow.exception.ExecutableItemNotFoundException; import com.yomahub.liteflow.flow.FlowBus; import com.yomahub.liteflow.parser.RegexEntity; import com.yomahub.liteflow.parser.RegexNodeEntity; -import com.yomahub.liteflow.util.SpringAware; +import com.yomahub.liteflow.spi.factory.ContextAwareFactory; import java.util.ArrayList; @@ -88,7 +88,7 @@ public class LiteFlowConditionBuilder { this.condition.getNodeList().add(chain); } else { //元数据没有的话,从spring上下文再取一遍,这部分是为了防止标有@Lazy懒加载的组件 - NodeComponent nodeComponent = SpringAware.getBean(item.getId()); + NodeComponent nodeComponent = ContextAwareFactory.loadContextAware().getBean(item.getId()); if (ObjectUtil.isNotNull(nodeComponent)){ FlowBus.addSpringScanNode(item.getId(), nodeComponent); return setValue(value); 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 c858050ce..581855868 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 @@ -2,13 +2,13 @@ package com.yomahub.liteflow.core; 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.annotation.util.AnnoUtil; 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; -import org.springframework.core.annotation.AnnotationUtils; +import com.yomahub.liteflow.spi.factory.LiteflowComponentSupportFactory; /** * 组件初始化器 @@ -31,23 +31,17 @@ public class ComponentInitializer { nodeComponent.setSelf(nodeComponent); nodeComponent.setType(type); - //先取传进来的name值(配置文件中配置的),再看有没有配置LiteflowComponent标注 + //先取传进来的name值(配置文件中配置的),再看有没有配置@LiteflowComponent标注 + //@LiteflowComponent标注只在spring体系下生效,这里用了spi机制取到相应环境下的实现类 nodeComponent.setName(desc); if (nodeComponent.getType().equals(NodeTypeEnum.COMMON) && StrUtil.isBlank(nodeComponent.getName())){ - //判断NodeComponent是否是标识了@LiteflowComponent的标注 - //如果标注了,那么要从中取到name字段 - LiteflowComponent liteflowComponent = nodeComponent.getClass().getAnnotation(LiteflowComponent.class); - if (ObjectUtil.isNotNull(liteflowComponent)) { - String name = liteflowComponent.name(); - if (StrUtil.isNotBlank(name)) { - nodeComponent.setName(name); - } - } + String name = LiteflowComponentSupportFactory.loadLiteflowComponentSupport().getCmpName(nodeComponent); + nodeComponent.setName(name); } //先从组件上取@RetryCount标注,如果没有,则看全局配置,全局配置如果不配置的话,默认是0 //默认retryForExceptions为Exception.class - LiteflowRetry liteflowRetryAnnotation = AnnotationUtils.getAnnotation(nodeComponent.getClass(), LiteflowRetry.class); + LiteflowRetry liteflowRetryAnnotation = AnnoUtil.getAnnotation(nodeComponent.getClass(), LiteflowRetry.class); LiteflowConfig liteflowConfig = LiteflowConfigGetter.get(); if (ObjectUtil.isNotNull(liteflowRetryAnnotation)) { nodeComponent.setRetryCount(liteflowRetryAnnotation.retry()); 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 049522bc0..41192c7d4 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 @@ -18,7 +18,7 @@ import com.yomahub.liteflow.enums.FlowParserTypeEnum; import com.yomahub.liteflow.exception.*; import com.yomahub.liteflow.parser.*; import com.yomahub.liteflow.property.LiteflowConfig; -import com.yomahub.liteflow.util.SpringAware; +import com.yomahub.liteflow.spi.factory.ContextAwareFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -175,11 +175,11 @@ public class FlowExecutor { Class c = Class.forName(path); switch (pattern) { case TYPE_XML: - return (XmlFlowParser) SpringAware.registerBean(c); + return (XmlFlowParser) ContextAwareFactory.loadContextAware().registerBean(c); case TYPE_JSON: - return (JsonFlowParser) SpringAware.registerBean(c); + return (JsonFlowParser) ContextAwareFactory.loadContextAware().registerBean(c); case TYPE_YML: - return (YmlFlowParser) SpringAware.registerBean(c); + return (YmlFlowParser) ContextAwareFactory.loadContextAware().registerBean(c); default: } } else if (isZKConfig(path)) { 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 745cc470d..b1b4dae59 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 @@ -14,9 +14,10 @@ import com.alibaba.ttl.TransmittableThreadLocal; import com.yomahub.liteflow.entity.executor.NodeExecutor; import com.yomahub.liteflow.entity.executor.DefaultNodeExecutor; import com.yomahub.liteflow.enums.NodeTypeEnum; +import com.yomahub.liteflow.spi.factory.CmpAroundAspectFactory; +import com.yomahub.liteflow.spi.factory.ContextAwareFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; import com.yomahub.liteflow.entity.data.CmpStep; import com.yomahub.liteflow.entity.data.CmpStepType; @@ -25,7 +26,6 @@ import com.yomahub.liteflow.entity.data.Slot; import com.yomahub.liteflow.entity.flow.Executable; import com.yomahub.liteflow.entity.monitor.CompStatistics; import com.yomahub.liteflow.monitor.MonitorBus; -import com.yomahub.liteflow.spring.ComponentScanner; import java.util.Map; @@ -39,7 +39,6 @@ public abstract class NodeComponent{ private final TransmittableThreadLocal slotIndexTL = new TransmittableThreadLocal<>(); - @Autowired(required = false) private MonitorBus monitorBus; private final TransmittableThreadLocal tagTL = new TransmittableThreadLocal<>(); @@ -69,16 +68,23 @@ public abstract class NodeComponent{ //是否结束整个流程,这个只对串行流程有效,并行流程无效 private final TransmittableThreadLocal isEndTL = new TransmittableThreadLocal<>(); + public NodeComponent() { + monitorBus = ContextAwareFactory.loadContextAware().getBean(MonitorBus.class); + } + public void execute() throws Exception{ Slot slot = this.getSlot(); LOG.info("[{}]:[O]start component[{}] execution",slot.getRequestId(),this.getClass().getSimpleName()); slot.addStep(new CmpStep(nodeId, name, CmpStepType.SINGLE)); + StopWatch stopWatch = new StopWatch(); stopWatch.start(); - self.beforeProcess(this.getNodeId(), slot); + //全局切面只在spring体系下生效,这里用了spi机制取到相应环境下的实现类 + //非spring环境下,全局切面为空实现 + CmpAroundAspectFactory.loadCmpAroundAspect().beforeProcess(this.getNodeId(), slot); self.process(); - self.afterProcess(this.getNodeId(), slot); + CmpAroundAspectFactory.loadCmpAroundAspect().afterProcess(this.getNodeId(), slot); stopWatch.stop(); @@ -104,21 +110,6 @@ public abstract class NodeComponent{ public abstract void process() throws Exception; - //process前置处理 - public void beforeProcess(String nodeId, Slot slot) { - if (ObjectUtil.isNotNull(ComponentScanner.cmpAroundAspect)) { - ComponentScanner.cmpAroundAspect.beforeProcess(nodeId, slot); - } - } - - //process后置处理 - public void afterProcess(String nodeId, Slot slot) { - if (ObjectUtil.isNotNull(ComponentScanner.cmpAroundAspect)) { - ComponentScanner.cmpAroundAspect.afterProcess(nodeId, slot); - } - } - - //是否进入该节点 public boolean isAccess(){ return true; 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 5c3017aaf..2ce9552fb 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 @@ -1,10 +1,8 @@ package com.yomahub.liteflow.entity.executor; import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.ReflectUtil; import com.google.common.collect.Maps; -import com.yomahub.liteflow.util.SpringAware; -import org.apache.commons.lang.StringUtils; +import com.yomahub.liteflow.spi.factory.ContextAwareFactory; import java.util.Map; @@ -43,7 +41,7 @@ public class NodeExecutorHelper { // 此处无需使用同步锁进行同步-因为即使同时创建了两个实例,但是添加到缓存中的只会存在一个且不会存在并发问题-具体是由ConcurrentMap保证 if (ObjectUtil.isNull(nodeExecutor)) { // 获取重试执行器实例 - nodeExecutor = SpringAware.registerBean(nodeExecutorClass); + nodeExecutor = ContextAwareFactory.loadContextAware().registerBean(nodeExecutorClass); // 缓存 nodeExecutorMap.put(nodeExecutorClass, nodeExecutor); } 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 886638592..1c3f18d39 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 @@ -18,29 +18,21 @@ import com.yomahub.liteflow.core.ScriptComponent; import com.yomahub.liteflow.core.ScriptCondComponent; import com.yomahub.liteflow.entity.data.DataBus; import com.yomahub.liteflow.entity.flow.Chain; -import com.yomahub.liteflow.entity.flow.Condition; import com.yomahub.liteflow.entity.flow.Node; import com.yomahub.liteflow.enums.FlowParserTypeEnum; import com.yomahub.liteflow.enums.NodeTypeEnum; import com.yomahub.liteflow.exception.ComponentCannotRegisterException; -import com.yomahub.liteflow.exception.NodeTypeNotSupportException; import com.yomahub.liteflow.parser.LocalJsonFlowParser; import com.yomahub.liteflow.parser.LocalXmlFlowParser; import com.yomahub.liteflow.parser.LocalYmlFlowParser; -import com.yomahub.liteflow.property.LiteflowConfig; -import com.yomahub.liteflow.property.LiteflowConfigGetter; import com.yomahub.liteflow.script.ScriptExecutor; import com.yomahub.liteflow.script.ScriptExecutorFactory; import com.yomahub.liteflow.script.exception.ScriptSpiException; +import com.yomahub.liteflow.spi.factory.ContextAwareFactory; import com.yomahub.liteflow.util.CopyOnWriteHashMap; -import com.yomahub.liteflow.util.SpringAware; -import org.checkerframework.checker.units.qual.C; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.util.SerializationUtils; -import java.util.HashMap; -import java.util.List; import java.util.Map; /** @@ -114,7 +106,7 @@ public class FlowBus { //如果是script类型的节点,因为class只有一个,所以也不能注册进spring上下文,注册的时候需要new Instance NodeComponent cmpInstance = null; if (!CollectionUtil.newArrayList(NodeTypeEnum.SCRIPT, NodeTypeEnum.COND_SCRIPT).contains(type)){ - cmpInstance = SpringAware.registerOrGet(nodeId, cmpClazz); + cmpInstance = ContextAwareFactory.loadContextAware().registerOrGet(nodeId, cmpClazz); } if (ObjectUtil.isNull(cmpInstance)) { diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/FlowParser.java b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/FlowParser.java index 9b50230b6..3400b3e3b 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/FlowParser.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/FlowParser.java @@ -1,19 +1,5 @@ package com.yomahub.liteflow.parser; -import cn.hutool.core.collection.CollectionUtil; -import cn.hutool.core.collection.ListUtil; -import cn.hutool.core.io.FileUtil; -import cn.hutool.core.util.ArrayUtil; -import com.google.common.collect.Lists; -import com.yomahub.liteflow.entity.flow.*; -import com.yomahub.liteflow.enums.ConditionTypeEnum; -import com.yomahub.liteflow.exception.ConfigErrorException; -import org.springframework.core.io.Resource; -import org.springframework.core.io.support.PathMatchingResourcePatternResolver; -import org.springframework.util.Assert; -import org.springframework.util.ResourceUtils; - -import java.io.IOException; import java.util.*; /** @@ -21,46 +7,10 @@ import java.util.*; * @author guodongqing * @since 2.5.0 */ -public abstract class FlowParser { +public interface FlowParser { - public abstract void parseMain(List pathList) throws Exception; + void parseMain(List pathList) throws Exception; - public abstract void parse(List contentList) throws Exception; + void parse(List contentList) throws Exception; - //根据配置的ruleSource查找匹配的资源 - protected Resource[] matchRuleResources(final List pathList) throws IOException { - Assert.notEmpty(pathList, "rule source must not be null"); - - List allResource = new ArrayList<>(); - for (String path : pathList) { - String locationPattern; - - //如果path是绝对路径且这个文件存在时,我们认为这是一个本地文件路径,而并非classpath路径 - if (FileUtil.isAbsolutePath(path) && FileUtil.isFile(path)){ - locationPattern = ResourceUtils.FILE_URL_PREFIX + path; - } else { - if (!path.startsWith(ResourceUtils.CLASSPATH_URL_PREFIX)) { - locationPattern = ResourceUtils.CLASSPATH_URL_PREFIX + path; - }else{ - locationPattern = path; - } - } - - PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); - Resource[] resources = resolver.getResources(locationPattern); - if (ArrayUtil.isEmpty(resources)) { - throw new ConfigErrorException("config error,please check rule source property"); - } - allResource.addAll(ListUtil.toList(resources)); - } - - //如果有多个资源,检查资源都是同一个类型,如果出现不同类型的配置,则抛出错误提示 - Set fileTypeSet = new HashSet<>(); - allResource.forEach(resource -> fileTypeSet.add(FileUtil.extName(resource.getFilename()))); - if (fileTypeSet.size() != 1) { - throw new ConfigErrorException("config error,please use the same type of configuration"); - } - - return allResource.toArray(new Resource[]{}); - } } diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/JsonFlowParser.java b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/JsonFlowParser.java index 48de2c2e2..03be3d6b9 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/JsonFlowParser.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/JsonFlowParser.java @@ -10,17 +10,15 @@ import com.alibaba.fastjson.parser.Feature; import com.yomahub.liteflow.builder.LiteFlowChainBuilder; import com.yomahub.liteflow.builder.LiteFlowConditionBuilder; import com.yomahub.liteflow.builder.LiteFlowNodeBuilder; -import com.yomahub.liteflow.core.NodeComponent; import com.yomahub.liteflow.enums.ConditionTypeEnum; import com.yomahub.liteflow.enums.NodeTypeEnum; import com.yomahub.liteflow.exception.EmptyConditionValueException; import com.yomahub.liteflow.exception.NodeTypeNotSupportException; import com.yomahub.liteflow.exception.NotSupportConditionException; import com.yomahub.liteflow.flow.FlowBus; -import com.yomahub.liteflow.spring.ComponentScanner; +import com.yomahub.liteflow.spi.factory.ContextCmpInitFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import java.util.*; /** @@ -29,7 +27,7 @@ import java.util.*; * @author guodongqing * @since 2.5.0 */ -public abstract class JsonFlowParser extends FlowParser { +public abstract class JsonFlowParser implements FlowParser { private final Logger LOG = LoggerFactory.getLogger(JsonFlowParser.class); @@ -55,11 +53,10 @@ public abstract class JsonFlowParser extends FlowParser { //json格式,解析过程 public void parseJsonObject(List flowJsonObjectList) throws Exception { - for (Map.Entry componentEntry : ComponentScanner.nodeComponentMap.entrySet()) { - if (!FlowBus.containNode(componentEntry.getKey())) { - FlowBus.addSpringScanNode(componentEntry.getKey(), componentEntry.getValue()); - } - } + //在相应的环境下进行节点的初始化工作 + //在spring体系下会获得spring扫描后的节点,接入元数据 + //在非spring体系下是一个空实现,等于不做此步骤 + ContextCmpInitFactory.loadContextCmpInit().initCmp(); //先在元数据里放上chain //先放有一个好处,可以在parse的时候先映射到FlowBus的chainMap,然后再去解析 diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/LocalJsonFlowParser.java b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/LocalJsonFlowParser.java index b53bdcbbd..6a313eebd 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/LocalJsonFlowParser.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/LocalJsonFlowParser.java @@ -1,10 +1,6 @@ package com.yomahub.liteflow.parser; -import cn.hutool.core.collection.ListUtil; -import cn.hutool.core.io.IoUtil; -import cn.hutool.core.util.CharsetUtil; -import cn.hutool.core.util.StrUtil; -import org.springframework.core.io.Resource; +import com.yomahub.liteflow.spi.factory.PathContentParserFactory; import java.util.List; @@ -16,14 +12,7 @@ public class LocalJsonFlowParser extends JsonFlowParser{ @Override public void parseMain(List pathList) throws Exception { - Resource[] resources = matchRuleResources(pathList); - List contentList = ListUtil.toList(); - for (Resource resource : resources) { - String content = IoUtil.read(resource.getInputStream(), CharsetUtil.CHARSET_UTF_8); - if (StrUtil.isNotBlank(content)){ - contentList.add(content); - } - } + List contentList = PathContentParserFactory.loadContextAware().parseContent(pathList); parse(contentList); } } diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/LocalXmlFlowParser.java b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/LocalXmlFlowParser.java index 5a8d73130..f55a31ef7 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/LocalXmlFlowParser.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/LocalXmlFlowParser.java @@ -7,11 +7,7 @@ */ package com.yomahub.liteflow.parser; -import cn.hutool.core.collection.ListUtil; -import cn.hutool.core.io.IoUtil; -import cn.hutool.core.util.CharsetUtil; -import cn.hutool.core.util.StrUtil; -import org.springframework.core.io.Resource; +import com.yomahub.liteflow.spi.factory.PathContentParserFactory; import java.util.List; @@ -22,14 +18,7 @@ import java.util.List; public class LocalXmlFlowParser extends XmlFlowParser{ public void parseMain(List pathList) throws Exception { - Resource[] resources = matchRuleResources(pathList); - List contentList = ListUtil.toList(); - for (Resource resource : resources) { - String content = IoUtil.read(resource.getInputStream(), CharsetUtil.CHARSET_UTF_8); - if (StrUtil.isNotBlank(content)){ - contentList.add(content); - } - } + List contentList = PathContentParserFactory.loadContextAware().parseContent(pathList); parse(contentList); } } diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/LocalYmlFlowParser.java b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/LocalYmlFlowParser.java index bf7c16e62..ff0be7942 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/LocalYmlFlowParser.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/LocalYmlFlowParser.java @@ -1,10 +1,6 @@ package com.yomahub.liteflow.parser; -import cn.hutool.core.collection.ListUtil; -import cn.hutool.core.io.IoUtil; -import cn.hutool.core.util.CharsetUtil; -import cn.hutool.core.util.StrUtil; -import org.springframework.core.io.Resource; +import com.yomahub.liteflow.spi.factory.PathContentParserFactory; import java.util.List; @@ -18,14 +14,7 @@ public class LocalYmlFlowParser extends YmlFlowParser { @Override public void parseMain(List pathList) throws Exception { - Resource[] resources = matchRuleResources(pathList); - List contentList = ListUtil.toList(); - for (Resource resource : resources) { - String content = IoUtil.read(resource.getInputStream(), CharsetUtil.CHARSET_UTF_8); - if (StrUtil.isNotBlank(content)){ - contentList.add(content); - } - } + List contentList = PathContentParserFactory.loadContextAware().parseContent(pathList); parse(contentList); } diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/XmlFlowParser.java b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/XmlFlowParser.java index 26e74963c..a7a330bfc 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/parser/XmlFlowParser.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/parser/XmlFlowParser.java @@ -7,27 +7,24 @@ import cn.hutool.core.util.StrUtil; import com.yomahub.liteflow.builder.LiteFlowChainBuilder; import com.yomahub.liteflow.builder.LiteFlowConditionBuilder; import com.yomahub.liteflow.builder.LiteFlowNodeBuilder; -import com.yomahub.liteflow.core.NodeComponent; import com.yomahub.liteflow.enums.ConditionTypeEnum; import com.yomahub.liteflow.enums.NodeTypeEnum; import com.yomahub.liteflow.exception.*; import com.yomahub.liteflow.flow.FlowBus; -import com.yomahub.liteflow.spring.ComponentScanner; +import com.yomahub.liteflow.spi.factory.ContextCmpInitFactory; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.slf4j.Logger; import org.slf4j.LoggerFactory; - import java.util.Iterator; import java.util.List; -import java.util.Map.Entry; /** * xml形式的解析器 * @author Bryan.Zhang */ -public abstract class XmlFlowParser extends FlowParser { +public abstract class XmlFlowParser implements FlowParser { private final Logger LOG = LoggerFactory.getLogger(XmlFlowParser.class); @@ -49,12 +46,10 @@ public abstract class XmlFlowParser extends FlowParser { //xml形式的主要解析过程 public void parseDocument(List documentList) throws Exception { - //先进行Spring上下文中的节点的判断 - for (Entry componentEntry : ComponentScanner.nodeComponentMap.entrySet()) { - if (!FlowBus.containNode(componentEntry.getKey())) { - FlowBus.addSpringScanNode(componentEntry.getKey(), componentEntry.getValue()); - } - } + //在相应的环境下进行节点的初始化工作 + //在spring体系下会获得spring扫描后的节点,接入元数据 + //在非spring体系下是一个空实现,等于不做此步骤 + ContextCmpInitFactory.loadContextCmpInit().initCmp(); //先在元数据里放上chain //先放有一个好处,可以在parse的时候先映射到FlowBus的chainMap,然后再去解析 diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/property/LiteflowConfigGetter.java b/liteflow-core/src/main/java/com/yomahub/liteflow/property/LiteflowConfigGetter.java index 3e5b683cf..6ef347d55 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/property/LiteflowConfigGetter.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/property/LiteflowConfigGetter.java @@ -1,22 +1,31 @@ package com.yomahub.liteflow.property; import cn.hutool.core.util.ObjectUtil; -import com.yomahub.liteflow.util.SpringAware; +import com.yomahub.liteflow.spi.factory.ContextAwareFactory; /** * liteflow的配置获取器 */ public class LiteflowConfigGetter { + private static LiteflowConfig liteflowConfig; + public static LiteflowConfig get(){ - LiteflowConfig liteflowConfig = SpringAware.getBean(LiteflowConfig.class); - //这里liteflowConfig不可能为null - //如果在springboot环境,由于自动装配,所以不可能为null - //在spring环境,如果xml没配置,在FlowExecutor的init时候就已经报错了 - //只有在非spring环境下,是为null if (ObjectUtil.isNull(liteflowConfig)){ - liteflowConfig = new LiteflowConfig(); + liteflowConfig = ContextAwareFactory.loadContextAware().getBean(LiteflowConfig.class); + //这里liteflowConfig不可能为null + //如果在springboot环境,由于自动装配,所以不可能为null + //在spring环境,如果xml没配置,在FlowExecutor的init时候就已经报错了 + //只有在非spring环境下,是为null + if (ObjectUtil.isNull(liteflowConfig)){ + liteflowConfig = new LiteflowConfig(); + } } + return liteflowConfig; } + + public static void clean(){ + liteflowConfig = null; + } } diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spi/CmpAroundAspect.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/CmpAroundAspect.java new file mode 100644 index 000000000..550b89d83 --- /dev/null +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/CmpAroundAspect.java @@ -0,0 +1,15 @@ +package com.yomahub.liteflow.spi; + +import com.yomahub.liteflow.entity.data.Slot; + +/** + * 组件全局切面spi接口 + * @author Bryan.Zhang + * @since 2.6.11 + */ +public interface CmpAroundAspect extends SpiPriority { + + void beforeProcess(String nodeId, Slot slot); + + void afterProcess(String nodeId, Slot slot); +} diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spi/ContextAware.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/ContextAware.java new file mode 100644 index 000000000..d313f8575 --- /dev/null +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/ContextAware.java @@ -0,0 +1,20 @@ +package com.yomahub.liteflow.spi; + +/** + * 环境容器SPI接口 + * + * @author Bryan.Zhang + * @since 2.6.11 + */ +public interface ContextAware extends SpiPriority { + + T getBean(String name); + + T getBean(Class clazz); + + T registerBean(String beanName, Class clazz); + + T registerBean(Class clazz); + + T registerOrGet(String beanName, Class clazz); +} diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spi/ContextCmpInit.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/ContextCmpInit.java new file mode 100644 index 000000000..0c82bb8d8 --- /dev/null +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/ContextCmpInit.java @@ -0,0 +1,13 @@ +package com.yomahub.liteflow.spi; + +/** + * 环境容器中组件初始化SPI接口 + * 分2个,非spring环境下的实现和spring体系下的实现 + * + * @author Bryan.Zhang + * @since 2.6.11 + */ +public interface ContextCmpInit extends SpiPriority { + + void initCmp(); +} diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spi/LiteflowComponentSupport.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/LiteflowComponentSupport.java new file mode 100644 index 000000000..da3790250 --- /dev/null +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/LiteflowComponentSupport.java @@ -0,0 +1,15 @@ +package com.yomahub.liteflow.spi; + +import com.yomahub.liteflow.core.NodeComponent; + +/** + * LiteflowComponent注解处理器SPI接口 + * + * @author Bryan.Zhang + * @since 2.6.11 + */ +public interface LiteflowComponentSupport extends SpiPriority { + + String getCmpName(NodeComponent nodeComponent); + +} diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spi/PathContentParser.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/PathContentParser.java new file mode 100644 index 000000000..10682a487 --- /dev/null +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/PathContentParser.java @@ -0,0 +1,8 @@ +package com.yomahub.liteflow.spi; + +import java.util.List; + +public interface PathContentParser extends SpiPriority{ + + List parseContent(List pathList) throws Exception; +} diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spi/SpiPriority.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/SpiPriority.java new file mode 100644 index 000000000..5a165d266 --- /dev/null +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/SpiPriority.java @@ -0,0 +1,12 @@ +package com.yomahub.liteflow.spi; + +/** + * Spi实现的优先级接口 + * 数字越小优先级越高 + * @author Bryan.Zhang + * @since 2.6.11 + */ +public interface SpiPriority { + + int priority(); +} diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spi/factory/CmpAroundAspectFactory.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/factory/CmpAroundAspectFactory.java new file mode 100644 index 000000000..6f4bbd284 --- /dev/null +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/factory/CmpAroundAspectFactory.java @@ -0,0 +1,33 @@ +package com.yomahub.liteflow.spi.factory; + +import cn.hutool.core.util.ObjectUtil; +import com.yomahub.liteflow.spi.CmpAroundAspect; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.ServiceLoader; + +/** + * 组件全局拦截器SPI工厂类 + * @author Bryan.Zhang + * @since 2.6.11 + */ +public class CmpAroundAspectFactory { + + private static CmpAroundAspect cmpAroundAspect; + + public static CmpAroundAspect loadCmpAroundAspect(){ + if (ObjectUtil.isNull(cmpAroundAspect)){ + List list = new ArrayList<>(); + ServiceLoader.load(CmpAroundAspect.class).forEach(list::add); + list.sort(Comparator.comparingInt(CmpAroundAspect::priority)); + cmpAroundAspect = list.get(0); + } + return cmpAroundAspect; + } + + public static void clean(){ + cmpAroundAspect = null; + } +} diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spi/factory/ContextAwareFactory.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/factory/ContextAwareFactory.java new file mode 100644 index 000000000..d2e332d5e --- /dev/null +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/factory/ContextAwareFactory.java @@ -0,0 +1,34 @@ +package com.yomahub.liteflow.spi.factory; + +import cn.hutool.core.util.ObjectUtil; +import com.yomahub.liteflow.spi.ContextAware; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.ServiceLoader; + +/** + * 环境容器SPI工厂类 + * 在spring体系下会获得spring的上下文包装实现 + * @author Bryan.Zhang + * @since 2.6.11 + */ +public class ContextAwareFactory { + + private static ContextAware contextAware; + + public static ContextAware loadContextAware(){ + if (ObjectUtil.isNull(contextAware)){ + List list = new ArrayList<>(); + ServiceLoader.load(ContextAware.class).forEach(list::add); + list.sort(Comparator.comparingInt(ContextAware::priority)); + contextAware = list.get(0); + } + return contextAware; + } + + public static void clean(){ + contextAware = null; + } +} diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spi/factory/ContextCmpInitFactory.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/factory/ContextCmpInitFactory.java new file mode 100644 index 000000000..0779ba30f --- /dev/null +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/factory/ContextCmpInitFactory.java @@ -0,0 +1,33 @@ +package com.yomahub.liteflow.spi.factory; + +import cn.hutool.core.util.ObjectUtil; +import com.yomahub.liteflow.spi.ContextCmpInit; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.ServiceLoader; + +/** + * 环境组件初始化SPI工厂类 + * 在spring体系下会获得基于spring扫描的组件初始化实现器 + * @author Bryan.Zhang + * @since 2.6.11 + */ +public class ContextCmpInitFactory { + + private static ContextCmpInit contextCmpInit; + + public static ContextCmpInit loadContextCmpInit(){ + if (ObjectUtil.isNull(contextCmpInit)){ + List list = new ArrayList<>(); + ServiceLoader.load(ContextCmpInit.class).forEach(list::add); + list.sort(Comparator.comparingInt(ContextCmpInit::priority)); + contextCmpInit = list.get(0); + } + return contextCmpInit; + } + + public static void clean(){ + contextCmpInit = null; + } +} diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spi/factory/LiteflowComponentSupportFactory.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/factory/LiteflowComponentSupportFactory.java new file mode 100644 index 000000000..159ca7bda --- /dev/null +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/factory/LiteflowComponentSupportFactory.java @@ -0,0 +1,32 @@ +package com.yomahub.liteflow.spi.factory; + +import cn.hutool.core.util.ObjectUtil; +import com.yomahub.liteflow.spi.LiteflowComponentSupport; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.ServiceLoader; + +/** + * liteflowComponent的支持扩展SPI工厂类 + * @author Bryan.Zhang + * @since 2.6.11 + */ +public class LiteflowComponentSupportFactory { + + private static LiteflowComponentSupport liteflowComponentSupport; + + public static LiteflowComponentSupport loadLiteflowComponentSupport(){ + if (ObjectUtil.isNull(liteflowComponentSupport)){ + List list = new ArrayList<>(); + ServiceLoader.load(LiteflowComponentSupport.class).forEach(list::add); + list.sort(Comparator.comparingInt(LiteflowComponentSupport::priority)); + liteflowComponentSupport = list.get(0); + } + return liteflowComponentSupport; + } + + public static void clean(){ + liteflowComponentSupport = null; + } +} diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spi/factory/PathContentParserFactory.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/factory/PathContentParserFactory.java new file mode 100644 index 000000000..707dbea5c --- /dev/null +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/factory/PathContentParserFactory.java @@ -0,0 +1,31 @@ +package com.yomahub.liteflow.spi.factory; + +import cn.hutool.core.util.ObjectUtil; +import com.yomahub.liteflow.spi.ContextAware; +import com.yomahub.liteflow.spi.PathContentParser; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.ServiceLoader; + +public class PathContentParserFactory { + + private static PathContentParser pathContentParser; + + public static PathContentParser loadContextAware(){ + if (ObjectUtil.isNull(pathContentParser)){ + List list = new ArrayList<>(); + ServiceLoader.load(PathContentParser.class).forEach(list::add); + list.sort(Comparator.comparingInt(PathContentParser::priority)); + pathContentParser = list.get(0); + } + return pathContentParser; + } + + public static void clean(){ + pathContentParser = null; + } +} + + diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spi/factory/SpiFactoryCleaner.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/factory/SpiFactoryCleaner.java new file mode 100644 index 000000000..a8510df3c --- /dev/null +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/factory/SpiFactoryCleaner.java @@ -0,0 +1,12 @@ +package com.yomahub.liteflow.spi.factory; + +public class SpiFactoryCleaner { + + public static void clean(){ + CmpAroundAspectFactory.clean(); + ContextAwareFactory.clean(); + ContextCmpInitFactory.clean(); + LiteflowComponentSupportFactory.clean(); + PathContentParserFactory.clean(); + } +} diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spi/local/LocalCmpAroundAspect.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/local/LocalCmpAroundAspect.java new file mode 100644 index 000000000..adc4468de --- /dev/null +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/local/LocalCmpAroundAspect.java @@ -0,0 +1,27 @@ +package com.yomahub.liteflow.spi.local; + +import com.yomahub.liteflow.entity.data.Slot; +import com.yomahub.liteflow.spi.CmpAroundAspect; + +/** + * 非Spring环境全局组件切面实现 + * 其实非Spring不支持全局组件切面,所以这个是个空实现 + * @author Bryan.Zhang + * @since 2.6.11 + */ +public class LocalCmpAroundAspect implements CmpAroundAspect { + @Override + public void beforeProcess(String nodeId, Slot slot) { + //无spring环境下为空实现 + } + + @Override + public void afterProcess(String nodeId, Slot slot) { + //无spring环境下为空实现 + } + + @Override + public int priority() { + return 2; + } +} diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spi/local/LocalContextAware.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/local/LocalContextAware.java new file mode 100644 index 000000000..8734b270c --- /dev/null +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/local/LocalContextAware.java @@ -0,0 +1,42 @@ +package com.yomahub.liteflow.spi.local; + +import cn.hutool.core.util.ReflectUtil; +import com.yomahub.liteflow.spi.ContextAware; + +/** + * 非Spring环境容器实现 + * 其实非Spring没有环境容器,所以这是个空实现 + * @author Bryan.Zhang + * @since 2.6.11 + */ +public class LocalContextAware implements ContextAware { + @Override + public T getBean(String name) { + return null; + } + + @Override + public T getBean(Class clazz) { + return null; + } + + @Override + public T registerBean(String beanName, Class clazz) { + return ReflectUtil.newInstance(clazz); + } + + @Override + public T registerBean(Class clazz) { + return registerBean(null, clazz); + } + + @Override + public T registerOrGet(String beanName, Class clazz) { + return registerBean(beanName, clazz); + } + + @Override + public int priority() { + return 2; + } +} diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spi/local/LocalContextCmpInit.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/local/LocalContextCmpInit.java new file mode 100644 index 000000000..e7337fd9d --- /dev/null +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/local/LocalContextCmpInit.java @@ -0,0 +1,21 @@ +package com.yomahub.liteflow.spi.local; + +import com.yomahub.liteflow.spi.ContextCmpInit; + +/** + * 非Spring环境容器上下文组件初始化实现 + * 其实非Spring没有环境容器,所以这是个空实现 + * @author Bryan.Zhang + * @since 2.6.11 + */ +public class LocalContextCmpInit implements ContextCmpInit { + @Override + public void initCmp() { + //非spring环境不用实现 + } + + @Override + public int priority() { + return 2; + } +} diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spi/local/LocalLiteflowComponentSupport.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/local/LocalLiteflowComponentSupport.java new file mode 100644 index 000000000..30e653243 --- /dev/null +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/local/LocalLiteflowComponentSupport.java @@ -0,0 +1,22 @@ +package com.yomahub.liteflow.spi.local; + +import com.yomahub.liteflow.core.NodeComponent; +import com.yomahub.liteflow.spi.LiteflowComponentSupport; + +/** + * 非spring环境LiteflowComponent注解的处理器 + * 非spring环境不支持@LiteflowComponent注解,所以返回null + * @author Bryan.Zhang + * @since 2.6.11 + */ +public class LocalLiteflowComponentSupport implements LiteflowComponentSupport { + @Override + public String getCmpName(NodeComponent nodeComponent) { + return null; + } + + @Override + public int priority() { + return 2; + } +} diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spi/local/LocalPathContentParser.java b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/local/LocalPathContentParser.java new file mode 100644 index 000000000..ae2b507dd --- /dev/null +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/spi/local/LocalPathContentParser.java @@ -0,0 +1,44 @@ +package com.yomahub.liteflow.spi.local; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.resource.ResourceUtil; +import com.yomahub.liteflow.exception.ConfigErrorException; +import com.yomahub.liteflow.spi.PathContentParser; + +import java.util.ArrayList; +import java.util.List; + +public class LocalPathContentParser implements PathContentParser { + + private final static String FILE_URL_PREFIX = "file:"; + + private final static String CLASSPATH_URL_PREFIX = "classpath:"; + + @Override + public List parseContent(List pathList) throws Exception { + if(CollectionUtil.isEmpty(pathList)){ + throw new ConfigErrorException("rule source must not be null"); + } + + List contentList = new ArrayList<>(); + + for(String path : pathList){ + if (FileUtil.isAbsolutePath(path) && FileUtil.isFile(path)){ + path = FILE_URL_PREFIX + path; + } else { + if (!path.startsWith(CLASSPATH_URL_PREFIX)) { + path = CLASSPATH_URL_PREFIX + path; + } + } + contentList.add(ResourceUtil.readUtf8Str(path)); + } + + return contentList; + } + + @Override + public int priority() { + return 2; + } +} diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/thread/LiteFlowDefaultExecutorBuilder.java b/liteflow-core/src/main/java/com/yomahub/liteflow/thread/LiteFlowDefaultExecutorBuilder.java index 76c2b87ba..20f4ea23c 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/thread/LiteFlowDefaultExecutorBuilder.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/thread/LiteFlowDefaultExecutorBuilder.java @@ -1,12 +1,10 @@ package com.yomahub.liteflow.thread; import cn.hutool.core.util.ObjectUtil; -import com.alibaba.ttl.threadpool.TtlExecutors; import com.yomahub.liteflow.property.LiteflowConfig; -import com.yomahub.liteflow.util.SpringAware; +import com.yomahub.liteflow.property.LiteflowConfigGetter; import java.util.concurrent.*; -import java.util.concurrent.atomic.AtomicLong; /** * LiteFlow默认的并行多线程执行器实现 @@ -16,7 +14,7 @@ import java.util.concurrent.atomic.AtomicLong; public class LiteFlowDefaultExecutorBuilder implements ExecutorBuilder{ @Override public ExecutorService buildExecutor() { - LiteflowConfig liteflowConfig = SpringAware.getBean(LiteflowConfig.class); + LiteflowConfig liteflowConfig = LiteflowConfigGetter.get(); //只有在非spring的场景下liteflowConfig才会为null if (ObjectUtil.isNull(liteflowConfig)){ liteflowConfig = new LiteflowConfig(); diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/util/LiteFlowExecutorPoolShutdown.java b/liteflow-core/src/main/java/com/yomahub/liteflow/util/LiteFlowExecutorPoolShutdown.java index bae10f630..ddc3f6887 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/util/LiteFlowExecutorPoolShutdown.java +++ b/liteflow-core/src/main/java/com/yomahub/liteflow/util/LiteFlowExecutorPoolShutdown.java @@ -1,5 +1,6 @@ package com.yomahub.liteflow.util; +import com.yomahub.liteflow.spi.factory.ContextAwareFactory; import com.yomahub.liteflow.thread.ExecutorHelper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -18,7 +19,7 @@ public class LiteFlowExecutorPoolShutdown { @PreDestroy public void destroy() throws Exception { - ExecutorService executorService = SpringAware.getBean("whenExecutors"); + ExecutorService executorService = ContextAwareFactory.loadContextAware().getBean("whenExecutors"); LOG.info("Start closing the liteflow-when-calls..."); ExecutorHelper.loadInstance().shutdownAwaitTermination(executorService); diff --git a/liteflow-core/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.CmpAroundAspect b/liteflow-core/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.CmpAroundAspect new file mode 100644 index 000000000..ea0ae6d99 --- /dev/null +++ b/liteflow-core/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.CmpAroundAspect @@ -0,0 +1,2 @@ +# 无Spring的实现 +com.yomahub.liteflow.spi.local.LocalCmpAroundAspect \ No newline at end of file diff --git a/liteflow-core/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.ContextAware b/liteflow-core/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.ContextAware new file mode 100644 index 000000000..399ac81e4 --- /dev/null +++ b/liteflow-core/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.ContextAware @@ -0,0 +1,2 @@ +# 无Spring的实现 +com.yomahub.liteflow.spi.local.LocalContextAware \ No newline at end of file diff --git a/liteflow-core/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.ContextCmpInit b/liteflow-core/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.ContextCmpInit new file mode 100644 index 000000000..4f178faeb --- /dev/null +++ b/liteflow-core/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.ContextCmpInit @@ -0,0 +1,2 @@ +# 无Spring的实现 +com.yomahub.liteflow.spi.local.LocalContextCmpInit \ No newline at end of file diff --git a/liteflow-core/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.LiteflowComponentSupport b/liteflow-core/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.LiteflowComponentSupport new file mode 100644 index 000000000..38f7403f1 --- /dev/null +++ b/liteflow-core/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.LiteflowComponentSupport @@ -0,0 +1,2 @@ +# 无Spring的实现 +com.yomahub.liteflow.spi.local.LocalLiteflowComponentSupport \ No newline at end of file diff --git a/liteflow-core/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.PathContentParser b/liteflow-core/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.PathContentParser new file mode 100644 index 000000000..446b419f8 --- /dev/null +++ b/liteflow-core/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.PathContentParser @@ -0,0 +1,2 @@ +# 无Spring的实现 +com.yomahub.liteflow.spi.local.LocalPathContentParser \ No newline at end of file diff --git a/liteflow-spring-boot-starter/pom.xml b/liteflow-spring-boot-starter/pom.xml index 050574944..6aaad0441 100644 --- a/liteflow-spring-boot-starter/pom.xml +++ b/liteflow-spring-boot-starter/pom.xml @@ -16,7 +16,7 @@ com.yomahub - liteflow-core + liteflow-spring ${project.parent.version} diff --git a/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/config/LiteflowMainAutoConfiguration.java b/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/config/LiteflowMainAutoConfiguration.java index e8fe65d8d..18eda53ea 100644 --- a/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/config/LiteflowMainAutoConfiguration.java +++ b/liteflow-spring-boot-starter/src/main/java/com/yomahub/liteflow/springboot/config/LiteflowMainAutoConfiguration.java @@ -1,12 +1,11 @@ package com.yomahub.liteflow.springboot.config; -import cn.hutool.core.util.StrUtil; import com.yomahub.liteflow.core.FlowExecutor; import com.yomahub.liteflow.monitor.MonitorBus; import com.yomahub.liteflow.property.LiteflowConfig; +import com.yomahub.liteflow.spi.spring.SpringAware; import com.yomahub.liteflow.spring.ComponentScanner; import com.yomahub.liteflow.springboot.LiteflowExecutorInit; -import com.yomahub.liteflow.util.SpringAware; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; diff --git a/liteflow-spring/pom.xml b/liteflow-spring/pom.xml new file mode 100644 index 000000000..179f82285 --- /dev/null +++ b/liteflow-spring/pom.xml @@ -0,0 +1,37 @@ + + + + liteflow + com.yomahub + 2.6.11 + + 4.0.0 + + liteflow-spring + + + + com.yomahub + liteflow-core + ${project.parent.version} + + + org.springframework + spring-beans + + + org.springframework + spring-context + + + org.springframework + spring-aop + + + org.springframework + spring-expression + + + \ No newline at end of file diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/annotation/LiteflowComponent.java b/liteflow-spring/src/main/java/com/yomahub/liteflow/annotation/LiteflowComponent.java similarity index 99% rename from liteflow-core/src/main/java/com/yomahub/liteflow/annotation/LiteflowComponent.java rename to liteflow-spring/src/main/java/com/yomahub/liteflow/annotation/LiteflowComponent.java index ed830c959..8c3a58ab8 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/annotation/LiteflowComponent.java +++ b/liteflow-spring/src/main/java/com/yomahub/liteflow/annotation/LiteflowComponent.java @@ -1,8 +1,7 @@ package com.yomahub.liteflow.annotation; -import org.springframework.core.annotation.AliasFor; import org.springframework.stereotype.Component; - +import org.springframework.core.annotation.AliasFor; import java.lang.annotation.*; /** diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/util/SpringAware.java b/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringAware.java similarity index 77% rename from liteflow-core/src/main/java/com/yomahub/liteflow/util/SpringAware.java rename to liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringAware.java index 0131a96b3..ed0c45fd8 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/util/SpringAware.java +++ b/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringAware.java @@ -1,9 +1,9 @@ -package com.yomahub.liteflow.util; +package com.yomahub.liteflow.spi.spring; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ReflectUtil; +import com.yomahub.liteflow.spi.ContextAware; import org.springframework.beans.BeansException; -import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.support.DefaultListableBeanFactory; import org.springframework.beans.factory.support.GenericBeanDefinition; @@ -14,7 +14,7 @@ import org.springframework.context.ApplicationContextAware; * 基于代码形式的spring上下文工具类 * @author Bryan.Zhang */ -public class SpringAware implements ApplicationContextAware { +public class SpringAware implements ApplicationContextAware, ContextAware { private static ApplicationContext applicationContext = null; @@ -29,7 +29,7 @@ public class SpringAware implements ApplicationContextAware { return applicationContext; } - public static T getBean(String name) { + public T getBean(String name) { try{ T t = (T) applicationContext.getBean(name); return t; @@ -38,7 +38,7 @@ public class SpringAware implements ApplicationContextAware { } } - public static T getBean(Class clazz) { + public T getBean(Class clazz) { try{ T t = applicationContext.getBean(clazz); return t; @@ -47,7 +47,7 @@ public class SpringAware implements ApplicationContextAware { } } - public static T registerBean(String beanName, Class c) { + public T registerBean(String beanName, Class c) { try{ DefaultListableBeanFactory beanFactory = (DefaultListableBeanFactory)applicationContext.getAutowireCapableBeanFactory(); BeanDefinition beanDefinition = new GenericBeanDefinition(); @@ -59,18 +59,23 @@ public class SpringAware implements ApplicationContextAware { } } - public static T registerBean(Class c) { + public T registerBean(Class c) { return registerBean(c.getName(), c); } - public static T registerOrGet(String beanName, Class clazz) { + public T registerOrGet(String beanName, Class clazz) { if (ObjectUtil.isNull(applicationContext)){ return null; } - T t = SpringAware.getBean(clazz); + T t = getBean(clazz); if (ObjectUtil.isNull(t)) { - t = SpringAware.registerBean(beanName, clazz); + t = registerBean(beanName, clazz); } return t; } + + @Override + public int priority() { + return 1; + } } diff --git a/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringCmpAroundAspect.java b/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringCmpAroundAspect.java new file mode 100644 index 000000000..456e16db9 --- /dev/null +++ b/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringCmpAroundAspect.java @@ -0,0 +1,32 @@ +package com.yomahub.liteflow.spi.spring; + +import cn.hutool.core.util.ObjectUtil; +import com.yomahub.liteflow.entity.data.Slot; +import com.yomahub.liteflow.spi.CmpAroundAspect; +import com.yomahub.liteflow.spring.ComponentScanner; + +/** + * Spring环境全局组件切面实现 + * @author Bryan.Zhang + * @since 2.6.11 + */ +public class SpringCmpAroundAspect implements CmpAroundAspect { + @Override + public void beforeProcess(String nodeId, Slot slot) { + if (ObjectUtil.isNotNull(ComponentScanner.cmpAroundAspect)) { + ComponentScanner.cmpAroundAspect.beforeProcess(nodeId, slot); + } + } + + @Override + public void afterProcess(String nodeId, Slot slot) { + if (ObjectUtil.isNotNull(ComponentScanner.cmpAroundAspect)) { + ComponentScanner.cmpAroundAspect.afterProcess(nodeId, slot); + } + } + + @Override + public int priority() { + return 1; + } +} diff --git a/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringContextCmpInit.java b/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringContextCmpInit.java new file mode 100644 index 000000000..e7ae4de7f --- /dev/null +++ b/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringContextCmpInit.java @@ -0,0 +1,29 @@ +package com.yomahub.liteflow.spi.spring; + +import com.yomahub.liteflow.core.NodeComponent; +import com.yomahub.liteflow.flow.FlowBus; +import com.yomahub.liteflow.spi.ContextCmpInit; +import com.yomahub.liteflow.spring.ComponentScanner; + +import java.util.Map; + +/** + * Spring环境容器上下文组件初始化实现 + * @author Bryan.Zhang + * @since 2.6.11 + */ +public class SpringContextCmpInit implements ContextCmpInit { + @Override + public void initCmp() { + for (Map.Entry componentEntry : ComponentScanner.nodeComponentMap.entrySet()) { + if (!FlowBus.containNode(componentEntry.getKey())) { + FlowBus.addSpringScanNode(componentEntry.getKey(), componentEntry.getValue()); + } + } + } + + @Override + public int priority() { + return 1; + } +} diff --git a/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringLiteflowComponentSupport.java b/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringLiteflowComponentSupport.java new file mode 100644 index 000000000..13267eb7d --- /dev/null +++ b/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringLiteflowComponentSupport.java @@ -0,0 +1,31 @@ +package com.yomahub.liteflow.spi.spring; + +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.yomahub.liteflow.annotation.LiteflowComponent; +import com.yomahub.liteflow.core.NodeComponent; +import com.yomahub.liteflow.spi.LiteflowComponentSupport; + +/** + * spring环境LiteflowComponent注解的处理器 + * @author Bryan.Zhang + * @since 2.6.11 + */ +public class SpringLiteflowComponentSupport implements LiteflowComponentSupport { + @Override + public String getCmpName(NodeComponent nodeComponent) { + //判断NodeComponent是否是标识了@LiteflowComponent的标注 + //如果标注了,那么要从中取到name字段 + LiteflowComponent liteflowComponent = nodeComponent.getClass().getAnnotation(LiteflowComponent.class); + if (ObjectUtil.isNotNull(liteflowComponent)) { + return liteflowComponent.name(); + }else{ + return null; + } + } + + @Override + public int priority() { + return 1; + } +} \ No newline at end of file diff --git a/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringPathContentParser.java b/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringPathContentParser.java new file mode 100644 index 000000000..569a25cc2 --- /dev/null +++ b/liteflow-spring/src/main/java/com/yomahub/liteflow/spi/spring/SpringPathContentParser.java @@ -0,0 +1,74 @@ +package com.yomahub.liteflow.spi.spring; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.collection.ListUtil; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.IoUtil; +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.CharsetUtil; +import cn.hutool.core.util.StrUtil; +import com.yomahub.liteflow.exception.ConfigErrorException; +import com.yomahub.liteflow.spi.PathContentParser; +import org.springframework.core.io.Resource; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.util.ResourceUtils; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class SpringPathContentParser implements PathContentParser { + @Override + public List parseContent(List pathList) throws Exception { + if(CollectionUtil.isEmpty(pathList)){ + throw new ConfigErrorException("rule source must not be null"); + } + + List allResource = new ArrayList<>(); + for (String path : pathList) { + String locationPattern; + + //如果path是绝对路径且这个文件存在时,我们认为这是一个本地文件路径,而并非classpath路径 + if (FileUtil.isAbsolutePath(path) && FileUtil.isFile(path)){ + locationPattern = ResourceUtils.FILE_URL_PREFIX + path; + } else { + if (!path.startsWith(ResourceUtils.CLASSPATH_URL_PREFIX)) { + locationPattern = ResourceUtils.CLASSPATH_URL_PREFIX + path; + }else{ + locationPattern = path; + } + } + + PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(); + Resource[] resources = resolver.getResources(locationPattern); + if (ArrayUtil.isEmpty(resources)) { + throw new ConfigErrorException("config error,please check rule source property"); + } + allResource.addAll(ListUtil.toList(resources)); + } + + //如果有多个资源,检查资源都是同一个类型,如果出现不同类型的配置,则抛出错误提示 + Set fileTypeSet = new HashSet<>(); + allResource.forEach(resource -> fileTypeSet.add(FileUtil.extName(resource.getFilename()))); + if (fileTypeSet.size() != 1) { + throw new ConfigErrorException("config error,please use the same type of configuration"); + } + + //转换成内容List + List contentList = new ArrayList<>(); + for (Resource resource : allResource) { + String content = IoUtil.read(resource.getInputStream(), CharsetUtil.CHARSET_UTF_8); + if (StrUtil.isNotBlank(content)){ + contentList.add(content); + } + } + + return contentList; + } + + @Override + public int priority() { + return 1; + } +} diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/spring/ComponentScanner.java b/liteflow-spring/src/main/java/com/yomahub/liteflow/spring/ComponentScanner.java similarity index 96% rename from liteflow-core/src/main/java/com/yomahub/liteflow/spring/ComponentScanner.java rename to liteflow-spring/src/main/java/com/yomahub/liteflow/spring/ComponentScanner.java index 58b7b2510..a9d782354 100644 --- a/liteflow-core/src/main/java/com/yomahub/liteflow/spring/ComponentScanner.java +++ b/liteflow-spring/src/main/java/com/yomahub/liteflow/spring/ComponentScanner.java @@ -11,14 +11,14 @@ package com.yomahub.liteflow.spring; import com.yomahub.liteflow.aop.ICmpAroundAspect; import com.yomahub.liteflow.core.NodeComponent; import com.yomahub.liteflow.property.LiteflowConfig; -import com.yomahub.liteflow.property.LiteflowConfigGetter; import com.yomahub.liteflow.util.LOGOPrinter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; -import java.util.*; +import java.util.HashMap; +import java.util.Map; /** * 组件扫描类,只要是NodeComponent的实现类,都可以被这个扫描器扫到 diff --git a/liteflow-spring/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.CmpAroundAspect b/liteflow-spring/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.CmpAroundAspect new file mode 100644 index 000000000..d2b9a458c --- /dev/null +++ b/liteflow-spring/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.CmpAroundAspect @@ -0,0 +1,2 @@ +# 无Spring的实现 +com.yomahub.liteflow.spi.spring.SpringCmpAroundAspect \ No newline at end of file diff --git a/liteflow-spring/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.ContextAware b/liteflow-spring/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.ContextAware new file mode 100644 index 000000000..0f374d346 --- /dev/null +++ b/liteflow-spring/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.ContextAware @@ -0,0 +1,2 @@ +# Spring的实现 +com.yomahub.liteflow.spi.spring.SpringAware \ No newline at end of file diff --git a/liteflow-spring/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.ContextCmpInit b/liteflow-spring/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.ContextCmpInit new file mode 100644 index 000000000..da957677c --- /dev/null +++ b/liteflow-spring/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.ContextCmpInit @@ -0,0 +1,2 @@ +# Spring的实现 +com.yomahub.liteflow.spi.spring.SpringContextCmpInit \ No newline at end of file diff --git a/liteflow-spring/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.LiteflowComponentSupport b/liteflow-spring/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.LiteflowComponentSupport new file mode 100644 index 000000000..02d4f6e4f --- /dev/null +++ b/liteflow-spring/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.LiteflowComponentSupport @@ -0,0 +1,2 @@ +# 无Spring的实现 +com.yomahub.liteflow.spi.spring.SpringLiteflowComponentSupport \ No newline at end of file diff --git a/liteflow-spring/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.PathContentParser b/liteflow-spring/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.PathContentParser new file mode 100644 index 000000000..c42665f48 --- /dev/null +++ b/liteflow-spring/src/main/resources/META-INF/services/com.yomahub.liteflow.spi.PathContentParser @@ -0,0 +1,2 @@ +# Spring的实现 +com.yomahub.liteflow.spi.spring.SpringPathContentParser \ No newline at end of file diff --git a/liteflow-testcase-nospring/pom.xml b/liteflow-testcase-nospring/pom.xml new file mode 100644 index 000000000..7252e31fa --- /dev/null +++ b/liteflow-testcase-nospring/pom.xml @@ -0,0 +1,50 @@ + + + + liteflow + com.yomahub + 2.6.11 + + 4.0.0 + + liteflow-testcase-nospring + + + + com.yomahub + liteflow-core + ${project.version} + + + junit + junit + test + + + org.apache.curator + curator-test + test + + + com.101tec + zkclient + test + + + + + + + org.apache.maven.plugins + maven-deploy-plugin + 2.8.2 + + true + + + + + + \ No newline at end of file diff --git a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/base/BaseTest.java b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/base/BaseTest.java new file mode 100644 index 000000000..882dff76a --- /dev/null +++ b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/base/BaseTest.java @@ -0,0 +1,22 @@ +package com.yomahub.liteflow.test.base; + +import com.yomahub.liteflow.core.FlowExecutor; +import com.yomahub.liteflow.entity.data.DefaultSlot; +import com.yomahub.liteflow.entity.data.LiteflowResponse; +import com.yomahub.liteflow.property.LiteflowConfig; +import org.junit.Assert; +import org.junit.Test; + +public class BaseTest { + + @Test + public void testBase(){ + LiteflowConfig config = new LiteflowConfig(); + config.setRuleSource("base/flow.xml"); + FlowExecutor executor = new FlowExecutor(); + executor.setLiteflowConfig(config); + executor.init(); + LiteflowResponse response = executor.execute2Resp("chain1", "test0"); + Assert.assertTrue(response.isSuccess()); + } +} diff --git a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/base/cmp/ACmp.java b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/base/cmp/ACmp.java new file mode 100644 index 000000000..e7d9de395 --- /dev/null +++ b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/base/cmp/ACmp.java @@ -0,0 +1,18 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.base.cmp; + +import com.yomahub.liteflow.core.NodeComponent; + +public class ACmp extends NodeComponent { + + @Override + public void process() { + System.out.println("ACmp executed!"); + } +} diff --git a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/base/cmp/BCmp.java b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/base/cmp/BCmp.java new file mode 100644 index 000000000..cfcfcfdd9 --- /dev/null +++ b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/base/cmp/BCmp.java @@ -0,0 +1,19 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.base.cmp; + +import com.yomahub.liteflow.core.NodeComponent; + +public class BCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("BCmp executed!"); + } + +} diff --git a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/base/cmp/CCmp.java b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/base/cmp/CCmp.java new file mode 100644 index 000000000..6194d81ab --- /dev/null +++ b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/base/cmp/CCmp.java @@ -0,0 +1,19 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.base.cmp; + +import com.yomahub.liteflow.core.NodeComponent; + +public class CCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("CCmp executed!"); + } + +} diff --git a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/base/cmp/DCmp.java b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/base/cmp/DCmp.java new file mode 100644 index 000000000..c5ec937e3 --- /dev/null +++ b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/base/cmp/DCmp.java @@ -0,0 +1,19 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.base.cmp; + +import com.yomahub.liteflow.core.NodeComponent; + +public class DCmp extends NodeComponent { + + @Override + public void process() { + System.out.println("DCmp executed!"); + } + +} diff --git a/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/base/cmp/ECmp.java b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/base/cmp/ECmp.java new file mode 100644 index 000000000..16d4d82db --- /dev/null +++ b/liteflow-testcase-nospring/src/test/java/com/yomahub/liteflow/test/base/cmp/ECmp.java @@ -0,0 +1,18 @@ +/** + *

Title: liteflow

+ *

Description: 轻量级的组件式流程框架

+ * @author Bryan.Zhang + * @email weenyc31@163.com + * @Date 2020/4/1 + */ +package com.yomahub.liteflow.test.base.cmp; + +import com.yomahub.liteflow.core.NodeCondComponent; + +public class ECmp extends NodeCondComponent { + + @Override + public String processCond() throws Exception { + return "g"; + } +} diff --git a/liteflow-testcase-nospring/src/test/resources/base/flow.xml b/liteflow-testcase-nospring/src/test/resources/base/flow.xml new file mode 100644 index 000000000..bc02c6194 --- /dev/null +++ b/liteflow-testcase-nospring/src/test/resources/base/flow.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/liteflow-testcase-script-groovy/src/test/java/com/yomahub/liteflow/test/BaseTest.java b/liteflow-testcase-script-groovy/src/test/java/com/yomahub/liteflow/test/BaseTest.java index 73938d978..51a5a47c7 100644 --- a/liteflow-testcase-script-groovy/src/test/java/com/yomahub/liteflow/test/BaseTest.java +++ b/liteflow-testcase-script-groovy/src/test/java/com/yomahub/liteflow/test/BaseTest.java @@ -1,6 +1,8 @@ package com.yomahub.liteflow.test; import com.yomahub.liteflow.flow.FlowBus; +import com.yomahub.liteflow.property.LiteflowConfigGetter; +import com.yomahub.liteflow.spi.factory.SpiFactoryCleaner; import com.yomahub.liteflow.spring.ComponentScanner; import com.yomahub.liteflow.thread.ExecutorHelper; import org.junit.AfterClass; @@ -12,5 +14,7 @@ public class BaseTest { ComponentScanner.cleanCache(); FlowBus.cleanCache(); ExecutorHelper.loadInstance().clearExecutorServiceMap(); + SpiFactoryCleaner.clean(); + LiteflowConfigGetter.clean(); } } diff --git a/liteflow-testcase-script-qlexpress/src/test/java/com/yomahub/liteflow/test/BaseTest.java b/liteflow-testcase-script-qlexpress/src/test/java/com/yomahub/liteflow/test/BaseTest.java index 73938d978..51a5a47c7 100644 --- a/liteflow-testcase-script-qlexpress/src/test/java/com/yomahub/liteflow/test/BaseTest.java +++ b/liteflow-testcase-script-qlexpress/src/test/java/com/yomahub/liteflow/test/BaseTest.java @@ -1,6 +1,8 @@ package com.yomahub.liteflow.test; import com.yomahub.liteflow.flow.FlowBus; +import com.yomahub.liteflow.property.LiteflowConfigGetter; +import com.yomahub.liteflow.spi.factory.SpiFactoryCleaner; import com.yomahub.liteflow.spring.ComponentScanner; import com.yomahub.liteflow.thread.ExecutorHelper; import org.junit.AfterClass; @@ -12,5 +14,7 @@ public class BaseTest { ComponentScanner.cleanCache(); FlowBus.cleanCache(); ExecutorHelper.loadInstance().clearExecutorServiceMap(); + SpiFactoryCleaner.clean(); + LiteflowConfigGetter.clean(); } } diff --git a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java index a40787648..51a5a47c7 100644 --- a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java +++ b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/BaseTest.java @@ -1,7 +1,8 @@ package com.yomahub.liteflow.test; -import com.yomahub.liteflow.entity.data.DataBus; import com.yomahub.liteflow.flow.FlowBus; +import com.yomahub.liteflow.property.LiteflowConfigGetter; +import com.yomahub.liteflow.spi.factory.SpiFactoryCleaner; import com.yomahub.liteflow.spring.ComponentScanner; import com.yomahub.liteflow.thread.ExecutorHelper; import org.junit.AfterClass; @@ -13,5 +14,7 @@ public class BaseTest { ComponentScanner.cleanCache(); FlowBus.cleanCache(); ExecutorHelper.loadInstance().clearExecutorServiceMap(); + SpiFactoryCleaner.clean(); + LiteflowConfigGetter.clean(); } } diff --git a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/aop/LFGlobalAOPTest.java b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/aop/LFGlobalAOPTest.java index eea72321b..95f5959e7 100644 --- a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/aop/LFGlobalAOPTest.java +++ b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/aop/LFGlobalAOPTest.java @@ -3,7 +3,6 @@ package com.yomahub.liteflow.test.aop; import com.yomahub.liteflow.core.FlowExecutor; import com.yomahub.liteflow.entity.data.DefaultSlot; import com.yomahub.liteflow.entity.data.LiteflowResponse; -import com.yomahub.liteflow.flow.FlowBus; import com.yomahub.liteflow.spring.ComponentScanner; import com.yomahub.liteflow.test.BaseTest; import com.yomahub.liteflow.test.aop.aspect.CmpAspect; diff --git a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor1.java b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor1.java index ba9fe5eaf..1ced39ce6 100644 --- a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor1.java +++ b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor1.java @@ -1,19 +1,17 @@ package com.yomahub.liteflow.test.customWhenThreadPool; import cn.hutool.core.util.ObjectUtil; -import com.alibaba.ttl.threadpool.TtlExecutors; import com.yomahub.liteflow.property.LiteflowConfig; +import com.yomahub.liteflow.spi.factory.ContextAwareFactory; import com.yomahub.liteflow.thread.ExecutorBuilder; -import com.yomahub.liteflow.util.SpringAware; import java.util.concurrent.*; -import java.util.concurrent.atomic.AtomicLong; public class CustomThreadExecutor1 implements ExecutorBuilder { @Override public ExecutorService buildExecutor() { - LiteflowConfig liteflowConfig = SpringAware.getBean(LiteflowConfig.class); + LiteflowConfig liteflowConfig = ContextAwareFactory.loadContextAware().getBean(LiteflowConfig.class); //只有在非spring的场景下liteflowConfig才会为null if (ObjectUtil.isNull(liteflowConfig)) { liteflowConfig = new LiteflowConfig(); diff --git a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor2.java b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor2.java index 1ff6d22a0..f1c07fbe8 100644 --- a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor2.java +++ b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor2.java @@ -1,18 +1,16 @@ package com.yomahub.liteflow.test.customWhenThreadPool; import cn.hutool.core.util.ObjectUtil; -import com.alibaba.ttl.threadpool.TtlExecutors; import com.yomahub.liteflow.property.LiteflowConfig; +import com.yomahub.liteflow.spi.factory.ContextAwareFactory; import com.yomahub.liteflow.thread.ExecutorBuilder; -import com.yomahub.liteflow.util.SpringAware; import java.util.concurrent.*; -import java.util.concurrent.atomic.AtomicLong; public class CustomThreadExecutor2 implements ExecutorBuilder { @Override public ExecutorService buildExecutor() { - LiteflowConfig liteflowConfig = SpringAware.getBean(LiteflowConfig.class); + LiteflowConfig liteflowConfig = ContextAwareFactory.loadContextAware().getBean(LiteflowConfig.class); //只有在非spring的场景下liteflowConfig才会为null if (ObjectUtil.isNull(liteflowConfig)) { liteflowConfig = new LiteflowConfig(); diff --git a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor3.java b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor3.java index 3519cfe20..55bfcf6f2 100644 --- a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor3.java +++ b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor3.java @@ -2,15 +2,15 @@ package com.yomahub.liteflow.test.customWhenThreadPool; import cn.hutool.core.util.ObjectUtil; import com.yomahub.liteflow.property.LiteflowConfig; +import com.yomahub.liteflow.spi.factory.ContextAwareFactory; import com.yomahub.liteflow.thread.ExecutorBuilder; -import com.yomahub.liteflow.util.SpringAware; import java.util.concurrent.ExecutorService; public class CustomThreadExecutor3 implements ExecutorBuilder { @Override public ExecutorService buildExecutor() { - LiteflowConfig liteflowConfig = SpringAware.getBean(LiteflowConfig.class); + LiteflowConfig liteflowConfig = ContextAwareFactory.loadContextAware().getBean(LiteflowConfig.class); //只有在非spring的场景下liteflowConfig才会为null if (ObjectUtil.isNull(liteflowConfig)) { liteflowConfig = new LiteflowConfig(); diff --git a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/privateDelivery/cmp/ACmp.java b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/privateDelivery/cmp/ACmp.java index 89802080b..6e9cec68a 100644 --- a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/privateDelivery/cmp/ACmp.java +++ b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/privateDelivery/cmp/ACmp.java @@ -14,7 +14,6 @@ import org.springframework.stereotype.Component; import java.util.HashSet; -@Component("a") @LiteflowComponent("a") public class ACmp extends NodeComponent { diff --git a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/privateDelivery/cmp/BCmp.java b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/privateDelivery/cmp/BCmp.java index 4e6023b90..b950f985b 100644 --- a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/privateDelivery/cmp/BCmp.java +++ b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/privateDelivery/cmp/BCmp.java @@ -13,7 +13,6 @@ import org.springframework.stereotype.Component; import java.util.Set; -@Component("b") @LiteflowComponent("b") public class BCmp extends NodeComponent { diff --git a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/privateDelivery/cmp/CCmp.java b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/privateDelivery/cmp/CCmp.java index 6d713b507..8d79eb1bc 100644 --- a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/privateDelivery/cmp/CCmp.java +++ b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/privateDelivery/cmp/CCmp.java @@ -9,7 +9,6 @@ package com.yomahub.liteflow.test.privateDelivery.cmp; import com.yomahub.liteflow.annotation.LiteflowComponent; import com.yomahub.liteflow.core.NodeComponent; -import org.springframework.stereotype.Component; @LiteflowComponent("c") public class CCmp extends NodeComponent { diff --git a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/reload/ReloadSpringbootTest.java b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/reload/ReloadSpringbootTest.java index 65a814fb5..c4f0fd63f 100644 --- a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/reload/ReloadSpringbootTest.java +++ b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/reload/ReloadSpringbootTest.java @@ -39,6 +39,8 @@ public class ReloadSpringbootTest extends BaseTest { @Resource private FlowExecutor flowExecutor; + //用reloadRule去重新加载,这里如果配置是放在本地。如果想修改,则要去修改target下面的flow.xml + //这里的测试,手动打断点然后去修改,是ok的。但是整个测试,暂且只是为了测试这个功能是否能正常运行 @Test public void testReload() throws Exception{ flowExecutor.reloadRule(); diff --git a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/tag/cmp/ACmp.java b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/tag/cmp/ACmp.java index 744ef128b..fd3b1dbab 100644 --- a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/tag/cmp/ACmp.java +++ b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/tag/cmp/ACmp.java @@ -11,8 +11,6 @@ import com.yomahub.liteflow.annotation.LiteflowComponent; import com.yomahub.liteflow.core.NodeComponent; import com.yomahub.liteflow.entity.data.Slot; -import java.util.HashSet; - @LiteflowComponent("a") public class ACmp extends NodeComponent { diff --git a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/tag/cmp/B1Cmp.java b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/tag/cmp/B1Cmp.java index 7acef141f..fcc4c6024 100644 --- a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/tag/cmp/B1Cmp.java +++ b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/tag/cmp/B1Cmp.java @@ -12,10 +12,6 @@ import com.yomahub.liteflow.annotation.LiteflowComponent; import com.yomahub.liteflow.core.NodeComponent; import com.yomahub.liteflow.entity.data.Slot; -import java.util.HashSet; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; - @LiteflowComponent("b1") public class B1Cmp extends NodeComponent { diff --git a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/tag/cmp/BCmp.java b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/tag/cmp/BCmp.java index 1b9a0013f..1e31246f0 100644 --- a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/tag/cmp/BCmp.java +++ b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/tag/cmp/BCmp.java @@ -12,9 +12,6 @@ import com.yomahub.liteflow.annotation.LiteflowComponent; import com.yomahub.liteflow.core.NodeComponent; import com.yomahub.liteflow.entity.data.Slot; -import java.util.HashSet; -import java.util.Set; - @LiteflowComponent("b") public class BCmp extends NodeComponent { diff --git a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/tag/cmp/CCmp.java b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/tag/cmp/CCmp.java index 2a51e60e6..40bb27d70 100644 --- a/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/tag/cmp/CCmp.java +++ b/liteflow-testcase-springboot/src/test/java/com/yomahub/liteflow/test/tag/cmp/CCmp.java @@ -8,7 +8,6 @@ package com.yomahub.liteflow.test.tag.cmp; import com.yomahub.liteflow.annotation.LiteflowComponent; -import com.yomahub.liteflow.core.NodeComponent; import com.yomahub.liteflow.core.NodeCondComponent; @LiteflowComponent("c") diff --git a/liteflow-testcase-springnative/pom.xml b/liteflow-testcase-springnative/pom.xml index e48b9e427..5a567fccc 100644 --- a/liteflow-testcase-springnative/pom.xml +++ b/liteflow-testcase-springnative/pom.xml @@ -14,7 +14,7 @@ com.yomahub - liteflow-core + liteflow-spring ${project.version} diff --git a/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/BaseTest.java b/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/BaseTest.java index 73938d978..51a5a47c7 100644 --- a/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/BaseTest.java +++ b/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/BaseTest.java @@ -1,6 +1,8 @@ package com.yomahub.liteflow.test; import com.yomahub.liteflow.flow.FlowBus; +import com.yomahub.liteflow.property.LiteflowConfigGetter; +import com.yomahub.liteflow.spi.factory.SpiFactoryCleaner; import com.yomahub.liteflow.spring.ComponentScanner; import com.yomahub.liteflow.thread.ExecutorHelper; import org.junit.AfterClass; @@ -12,5 +14,7 @@ public class BaseTest { ComponentScanner.cleanCache(); FlowBus.cleanCache(); ExecutorHelper.loadInstance().clearExecutorServiceMap(); + SpiFactoryCleaner.clean(); + LiteflowConfigGetter.clean(); } } diff --git a/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor1.java b/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor1.java index 0158b31ec..4195ade94 100644 --- a/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor1.java +++ b/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor1.java @@ -2,8 +2,8 @@ package com.yomahub.liteflow.test.customWhenThreadPool; import cn.hutool.core.util.ObjectUtil; import com.yomahub.liteflow.property.LiteflowConfig; +import com.yomahub.liteflow.spi.factory.ContextAwareFactory; import com.yomahub.liteflow.thread.ExecutorBuilder; -import com.yomahub.liteflow.util.SpringAware; import java.util.concurrent.ExecutorService; @@ -11,7 +11,7 @@ public class CustomThreadExecutor1 implements ExecutorBuilder { @Override public ExecutorService buildExecutor() { - LiteflowConfig liteflowConfig = SpringAware.getBean(LiteflowConfig.class); + LiteflowConfig liteflowConfig = ContextAwareFactory.loadContextAware().getBean(LiteflowConfig.class); //只有在非spring的场景下liteflowConfig才会为null if (ObjectUtil.isNull(liteflowConfig)) { liteflowConfig = new LiteflowConfig(); diff --git a/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor2.java b/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor2.java index 930105c6d..60638c3ca 100644 --- a/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor2.java +++ b/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor2.java @@ -2,15 +2,15 @@ package com.yomahub.liteflow.test.customWhenThreadPool; import cn.hutool.core.util.ObjectUtil; import com.yomahub.liteflow.property.LiteflowConfig; +import com.yomahub.liteflow.spi.factory.ContextAwareFactory; import com.yomahub.liteflow.thread.ExecutorBuilder; -import com.yomahub.liteflow.util.SpringAware; import java.util.concurrent.ExecutorService; public class CustomThreadExecutor2 implements ExecutorBuilder { @Override public ExecutorService buildExecutor() { - LiteflowConfig liteflowConfig = SpringAware.getBean(LiteflowConfig.class); + LiteflowConfig liteflowConfig = ContextAwareFactory.loadContextAware().getBean(LiteflowConfig.class); //只有在非spring的场景下liteflowConfig才会为null if (ObjectUtil.isNull(liteflowConfig)) { liteflowConfig = new LiteflowConfig(); diff --git a/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor3.java b/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor3.java index 3519cfe20..55bfcf6f2 100644 --- a/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor3.java +++ b/liteflow-testcase-springnative/src/test/java/com/yomahub/liteflow/test/customWhenThreadPool/CustomThreadExecutor3.java @@ -2,15 +2,15 @@ package com.yomahub.liteflow.test.customWhenThreadPool; import cn.hutool.core.util.ObjectUtil; import com.yomahub.liteflow.property.LiteflowConfig; +import com.yomahub.liteflow.spi.factory.ContextAwareFactory; import com.yomahub.liteflow.thread.ExecutorBuilder; -import com.yomahub.liteflow.util.SpringAware; import java.util.concurrent.ExecutorService; public class CustomThreadExecutor3 implements ExecutorBuilder { @Override public ExecutorService buildExecutor() { - LiteflowConfig liteflowConfig = SpringAware.getBean(LiteflowConfig.class); + LiteflowConfig liteflowConfig = ContextAwareFactory.loadContextAware().getBean(LiteflowConfig.class); //只有在非spring的场景下liteflowConfig才会为null if (ObjectUtil.isNull(liteflowConfig)) { liteflowConfig = new LiteflowConfig(); diff --git a/liteflow-testcase-springnative/src/test/resources/config/application-local.xml b/liteflow-testcase-springnative/src/test/resources/config/application-local.xml index cf60572b1..751e16799 100644 --- a/liteflow-testcase-springnative/src/test/resources/config/application-local.xml +++ b/liteflow-testcase-springnative/src/test/resources/config/application-local.xml @@ -9,7 +9,7 @@ - + diff --git a/liteflow-testcase-springnative/src/test/resources/config/local-rule-source-pattern-match.xml b/liteflow-testcase-springnative/src/test/resources/config/local-rule-source-pattern-match.xml index 4f8b013c5..b4d8989f0 100644 --- a/liteflow-testcase-springnative/src/test/resources/config/local-rule-source-pattern-match.xml +++ b/liteflow-testcase-springnative/src/test/resources/config/local-rule-source-pattern-match.xml @@ -9,7 +9,7 @@ - + diff --git a/liteflow-testcase-springnative/src/test/resources/customThreadPool/application.xml b/liteflow-testcase-springnative/src/test/resources/customThreadPool/application.xml index 8641315a2..9032948a9 100644 --- a/liteflow-testcase-springnative/src/test/resources/customThreadPool/application.xml +++ b/liteflow-testcase-springnative/src/test/resources/customThreadPool/application.xml @@ -9,7 +9,7 @@ - + diff --git a/liteflow-testcase-springnative/src/test/resources/customWhenThreadPool/application.xml b/liteflow-testcase-springnative/src/test/resources/customWhenThreadPool/application.xml index 66777a653..ce09aca97 100644 --- a/liteflow-testcase-springnative/src/test/resources/customWhenThreadPool/application.xml +++ b/liteflow-testcase-springnative/src/test/resources/customWhenThreadPool/application.xml @@ -9,7 +9,7 @@ - + diff --git a/liteflow-testcase-springnative/src/test/resources/enable/application-local.xml b/liteflow-testcase-springnative/src/test/resources/enable/application-local.xml index 8c70f978f..cd2324656 100644 --- a/liteflow-testcase-springnative/src/test/resources/enable/application-local.xml +++ b/liteflow-testcase-springnative/src/test/resources/enable/application-local.xml @@ -9,7 +9,7 @@ - + diff --git a/liteflow-testcase-springnative/src/test/resources/nullParam/application-local.xml b/liteflow-testcase-springnative/src/test/resources/nullParam/application-local.xml index 36bf18e53..4683e7c17 100644 --- a/liteflow-testcase-springnative/src/test/resources/nullParam/application-local.xml +++ b/liteflow-testcase-springnative/src/test/resources/nullParam/application-local.xml @@ -9,7 +9,7 @@ - + diff --git a/liteflow-testcase-springnative/src/test/resources/parser/application-json.xml b/liteflow-testcase-springnative/src/test/resources/parser/application-json.xml index b04869223..8025d6cf1 100644 --- a/liteflow-testcase-springnative/src/test/resources/parser/application-json.xml +++ b/liteflow-testcase-springnative/src/test/resources/parser/application-json.xml @@ -9,7 +9,7 @@ - + diff --git a/liteflow-testcase-springnative/src/test/resources/parser/application-xml.xml b/liteflow-testcase-springnative/src/test/resources/parser/application-xml.xml index 264d48316..f658f6da7 100644 --- a/liteflow-testcase-springnative/src/test/resources/parser/application-xml.xml +++ b/liteflow-testcase-springnative/src/test/resources/parser/application-xml.xml @@ -9,7 +9,7 @@ - + diff --git a/liteflow-testcase-springnative/src/test/resources/parser/application-yml.xml b/liteflow-testcase-springnative/src/test/resources/parser/application-yml.xml index 4a869d5bd..853f95005 100644 --- a/liteflow-testcase-springnative/src/test/resources/parser/application-yml.xml +++ b/liteflow-testcase-springnative/src/test/resources/parser/application-yml.xml @@ -9,7 +9,7 @@ - + diff --git a/liteflow-testcase-springnative/src/test/resources/zookeeper/application-json.xml b/liteflow-testcase-springnative/src/test/resources/zookeeper/application-json.xml index 8ee24176c..4e152ca6d 100644 --- a/liteflow-testcase-springnative/src/test/resources/zookeeper/application-json.xml +++ b/liteflow-testcase-springnative/src/test/resources/zookeeper/application-json.xml @@ -9,7 +9,7 @@ - + diff --git a/liteflow-testcase-springnative/src/test/resources/zookeeper/application-xml.xml b/liteflow-testcase-springnative/src/test/resources/zookeeper/application-xml.xml index 71b8230ee..ba42bb863 100644 --- a/liteflow-testcase-springnative/src/test/resources/zookeeper/application-xml.xml +++ b/liteflow-testcase-springnative/src/test/resources/zookeeper/application-xml.xml @@ -9,7 +9,7 @@ - + diff --git a/liteflow-testcase-springnative/src/test/resources/zookeeper/application-yml.xml b/liteflow-testcase-springnative/src/test/resources/zookeeper/application-yml.xml index a282d0023..512e1a433 100644 --- a/liteflow-testcase-springnative/src/test/resources/zookeeper/application-yml.xml +++ b/liteflow-testcase-springnative/src/test/resources/zookeeper/application-yml.xml @@ -9,7 +9,7 @@ - + diff --git a/pom.xml b/pom.xml index 0bbe10c1d..4730da878 100644 --- a/pom.xml +++ b/pom.xml @@ -253,7 +253,9 @@ liteflow-testcase-springnative liteflow-testcase-script-qlexpress liteflow-testcase-script-groovy - + liteflow-testcase-nospring + liteflow-spring +