diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/enums/CmpStepTypeEnum.java b/liteflow-core/src/main/java/com/yomahub/liteflow/enums/CmpStepTypeEnum.java
index f01a4f18..c8c6137f 100644
--- a/liteflow-core/src/main/java/com/yomahub/liteflow/enums/CmpStepTypeEnum.java
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/enums/CmpStepTypeEnum.java
@@ -1,6 +1,7 @@
/**
*
Title: liteflow
* Description: 轻量级的组件式流程框架
+ *
* @author Bryan.Zhang
* @email weenyc31@163.com
* @Date 2020/4/1
@@ -14,6 +15,6 @@ package com.yomahub.liteflow.enums;
*/
public enum CmpStepTypeEnum {
- START, END, SINGLE;
+ START, END, SINGLE, WHEN_START, WHEN_END;
}
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/WhenCondition.java b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/WhenCondition.java
index 15eb31cb..e38dbac8 100644
--- a/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/WhenCondition.java
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/flow/element/condition/WhenCondition.java
@@ -8,13 +8,17 @@
package com.yomahub.liteflow.flow.element.condition;
import com.yomahub.liteflow.common.LocalDefaultFlowConstant;
+import com.yomahub.liteflow.enums.CmpStepTypeEnum;
import com.yomahub.liteflow.enums.ConditionTypeEnum;
import com.yomahub.liteflow.enums.ParallelStrategyEnum;
import com.yomahub.liteflow.flow.element.Condition;
+import com.yomahub.liteflow.flow.entity.CmpStep;
import com.yomahub.liteflow.flow.parallel.strategy.ParallelStrategyExecutor;
import com.yomahub.liteflow.flow.parallel.strategy.ParallelStrategyHelper;
import com.yomahub.liteflow.log.LFLog;
import com.yomahub.liteflow.log.LFLoggerManager;
+import com.yomahub.liteflow.slot.DataBus;
+import com.yomahub.liteflow.slot.Slot;
import com.yomahub.liteflow.thread.ExecutorHelper;
import java.util.Set;
@@ -64,13 +68,16 @@ public class WhenCondition extends Condition {
// 使用线程池执行 when 并发流程
// 这块涉及到挺多的多线程逻辑,所以注释比较详细,看到这里的童鞋可以仔细阅读
private void executeAsyncCondition(Integer slotIndex) throws Exception {
-
+ Slot slot = DataBus.getSlot(slotIndex);
+ slot.addStep(new CmpStep("-1", "-1", CmpStepTypeEnum.WHEN_START));
// 获取并发执行策略
ParallelStrategyExecutor parallelStrategyExecutor = ParallelStrategyHelper.loadInstance().buildParallelExecutor(this.getParallelStrategy());
-
- // 执行并发逻辑
- parallelStrategyExecutor.execute(this, slotIndex);
-
+ try {
+ // 执行并发逻辑
+ parallelStrategyExecutor.execute(this, slotIndex);
+ } finally {
+ slot.addStep(new CmpStep("-1", "-1", CmpStepTypeEnum.WHEN_END));
+ }
}
public boolean isIgnoreError() {
diff --git a/liteflow-core/src/main/java/com/yomahub/liteflow/slot/Slot.java b/liteflow-core/src/main/java/com/yomahub/liteflow/slot/Slot.java
index 8bd133c1..6b878720 100644
--- a/liteflow-core/src/main/java/com/yomahub/liteflow/slot/Slot.java
+++ b/liteflow-core/src/main/java/com/yomahub/liteflow/slot/Slot.java
@@ -1,6 +1,7 @@
/**
* Title: liteflow
* Description: 轻量级的组件式流程框架
+ *
* @author Bryan.Zhang
* @email weenyc31@163.com
* @Date 2020/4/1
@@ -11,6 +12,7 @@ import cn.hutool.core.collection.ConcurrentHashSet;
import cn.hutool.core.collection.ListUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
+import com.yomahub.liteflow.enums.CmpStepTypeEnum;
import com.yomahub.liteflow.exception.NoSuchContextBeanException;
import com.yomahub.liteflow.exception.NullParamException;
import com.yomahub.liteflow.flow.element.Condition;
@@ -340,6 +342,21 @@ public class Slot {
CmpStep cmpStep;
for (Iterator it = executeSteps.iterator(); it.hasNext();) {
cmpStep = it.next();
+ if (CmpStepTypeEnum.WHEN_START.equals(cmpStep.getStepType())) {
+ str.append("【");
+ continue;
+ }
+ if (CmpStepTypeEnum.WHEN_END.equals(cmpStep.getStepType())) {
+ // 如果最后一个是==>则移除最后一个==>
+ if (str.toString().endsWith("==>")) {
+ str.delete(str.length() - 3, str.length());
+ }
+ str.append("】");
+ if (it.hasNext()) {
+ str.append("==>");
+ }
+ continue;
+ }
if (withTimeSpent) {
str.append(cmpStep.buildStringWithTime());
}
@@ -376,6 +393,21 @@ public class Slot {
CmpStep cmpStep;
for (Iterator it = rollbackSteps.iterator(); it.hasNext();) {
cmpStep = it.next();
+ if (CmpStepTypeEnum.WHEN_START.equals(cmpStep.getStepType())) {
+ str.append("【");
+ continue;
+ }
+ if (CmpStepTypeEnum.WHEN_END.equals(cmpStep.getStepType())) {
+ // 如果最后一个是==>则移除最后一个==>
+ if (str.toString().endsWith("==>")) {
+ str.delete(str.length() - 3, str.length());
+ }
+ str.append("】");
+ if (it.hasNext()) {
+ str.append("==>");
+ }
+ continue;
+ }
if (withRollbackTimeSpent) {
str.append(cmpStep.buildRollbackStringWithTime());
}
diff --git a/liteflow-rule-plugin/liteflow-rule-nacos/src/main/java/com/yomahub/liteflow/parser/nacos/NacosXmlELParser.java b/liteflow-rule-plugin/liteflow-rule-nacos/src/main/java/com/yomahub/liteflow/parser/nacos/NacosXmlELParser.java
index 0633bd65..92b9a2af 100644
--- a/liteflow-rule-plugin/liteflow-rule-nacos/src/main/java/com/yomahub/liteflow/parser/nacos/NacosXmlELParser.java
+++ b/liteflow-rule-plugin/liteflow-rule-nacos/src/main/java/com/yomahub/liteflow/parser/nacos/NacosXmlELParser.java
@@ -60,6 +60,12 @@ public class NacosXmlELParser extends ClassXmlFlowELParser {
if (StrUtil.isBlank(nacosParserVO.getPassword())) {
nacosParserVO.setPassword("");
}
+ if (StrUtil.isBlank(nacosParserVO.getAccessKey())){
+ nacosParserVO.setAccessKey("");
+ }
+ if (StrUtil.isBlank(nacosParserVO.getSecretKey())){
+ nacosParserVO.setSecretKey("");
+ }
helper = new NacosParserHelper(nacosParserVO);
}
catch (Exception e) {
diff --git a/liteflow-rule-plugin/liteflow-rule-nacos/src/main/java/com/yomahub/liteflow/parser/nacos/util/NacosParserHelper.java b/liteflow-rule-plugin/liteflow-rule-nacos/src/main/java/com/yomahub/liteflow/parser/nacos/util/NacosParserHelper.java
index 3765ccb4..31934e75 100644
--- a/liteflow-rule-plugin/liteflow-rule-nacos/src/main/java/com/yomahub/liteflow/parser/nacos/util/NacosParserHelper.java
+++ b/liteflow-rule-plugin/liteflow-rule-nacos/src/main/java/com/yomahub/liteflow/parser/nacos/util/NacosParserHelper.java
@@ -11,7 +11,6 @@ import com.yomahub.liteflow.spi.holder.ContextAwareHolder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.text.MessageFormat;
import java.util.Properties;
import java.util.concurrent.Executor;
import java.util.function.Consumer;
@@ -40,12 +39,8 @@ public class NacosParserHelper {
catch (Exception ignored) {
}
if (this.configService == null) {
- Properties properties = new Properties();
- properties.put(PropertyKeyConst.SERVER_ADDR, nacosParserVO.getServerAddr());
- properties.put(PropertyKeyConst.NAMESPACE, nacosParserVO.getNamespace());
- properties.put(PropertyKeyConst.USERNAME, nacosParserVO.getUsername());
- properties.put(PropertyKeyConst.PASSWORD, nacosParserVO.getPassword());
- this.configService = new NacosConfigService(properties);
+ Properties properties = getProperties(nacosParserVO);
+ this.configService = new NacosConfigService(properties);
}
}
catch (Exception e) {
@@ -53,6 +48,29 @@ public class NacosParserHelper {
}
}
+ private static Properties getProperties(NacosParserVO nacosParserVO) {
+ Properties properties = new Properties();
+ properties.put(PropertyKeyConst.SERVER_ADDR, nacosParserVO.getServerAddr());
+ properties.put(PropertyKeyConst.NAMESPACE, nacosParserVO.getNamespace());
+ if (StrUtil.isNotEmpty(nacosParserVO.getUsername())) {
+ // 用户名密码模式 填写用户名就必有密码
+ if (StrUtil.isEmpty(PropertyKeyConst.PASSWORD)){
+ throw new NacosException("Nacos config password is empty");
+ }
+ // 历史版本会使用用户名密码
+ properties.put(PropertyKeyConst.USERNAME, nacosParserVO.getUsername());
+ properties.put(PropertyKeyConst.PASSWORD, nacosParserVO.getPassword());
+ } else if (StrUtil.isNotEmpty(PropertyKeyConst.ACCESS_KEY)){
+ // 以下为阿里云RAM子账号使用 填写了ak就必有sk
+ if (StrUtil.isEmpty(PropertyKeyConst.SECRET_KEY)){
+ throw new NacosException("Nacos config secretKey is empty");
+ }
+ properties.put(PropertyKeyConst.ACCESS_KEY, nacosParserVO.getAccessKey());
+ properties.put(PropertyKeyConst.SECRET_KEY, nacosParserVO.getSecretKey());
+ }
+ return properties;
+ }
+
public String getContent() {
try {
return configService.getConfig(nacosParserVO.getDataId(), nacosParserVO.getGroup(), 3000L);
diff --git a/liteflow-rule-plugin/liteflow-rule-nacos/src/main/java/com/yomahub/liteflow/parser/nacos/vo/NacosParserVO.java b/liteflow-rule-plugin/liteflow-rule-nacos/src/main/java/com/yomahub/liteflow/parser/nacos/vo/NacosParserVO.java
index 010a240b..3d17f7f5 100644
--- a/liteflow-rule-plugin/liteflow-rule-nacos/src/main/java/com/yomahub/liteflow/parser/nacos/vo/NacosParserVO.java
+++ b/liteflow-rule-plugin/liteflow-rule-nacos/src/main/java/com/yomahub/liteflow/parser/nacos/vo/NacosParserVO.java
@@ -16,6 +16,10 @@ public class NacosParserVO {
private String group;
+ private String accessKey;
+
+ private String secretKey;
+
private String username;
private String password;
@@ -68,11 +72,33 @@ public class NacosParserVO {
this.password = password;
}
- @Override
- public String toString() {
- return "NacosParserVO{" + "serverAddr='" + serverAddr + '\'' + ", namespace='" + namespace + '\'' + ", dataId='"
- + dataId + '\'' + ", group='" + group + '\'' + ", username='" + username + '\'' + ", password='"
- + password + '\'' + '}';
+ public String getAccessKey() {
+ return accessKey;
}
+ public void setAccessKey(String accessKey) {
+ this.accessKey = accessKey;
+ }
+
+ public String getSecretKey() {
+ return secretKey;
+ }
+
+ public void setSecretKey(String secretKey) {
+ this.secretKey = secretKey;
+ }
+
+ @Override
+ public String toString() {
+ return "NacosParserVO{" +
+ "serverAddr='" + serverAddr + '\'' +
+ ", namespace='" + namespace + '\'' +
+ ", dataId='" + dataId + '\'' +
+ ", group='" + group + '\'' +
+ ", accessKey='" + accessKey + '\'' +
+ ", secretKey='" + secretKey + '\'' +
+ ", username='" + username + '\'' +
+ ", password='" + password + '\'' +
+ '}';
+ }
}