Skip to content

Commit 8d777af

Browse files
committed
支持流程中断后继续执行
1 parent 683b3fb commit 8d777af

File tree

2 files changed

+18
-3
lines changed

2 files changed

+18
-3
lines changed

README.md

+13-1
Original file line numberDiff line numberDiff line change
@@ -100,4 +100,16 @@ public class Application {
100100
2020-06-19 23:19:13.153 INFO 11520 --- [ main] c.lnwazg.workflow.flow.PlaceAnOrderFlow : decreaseInventoryProcessor processing...
101101
2020-06-19 23:19:13.153 INFO 11520 --- [ main] c.lnwazg.workflow.flow.PlaceAnOrderFlow : createOrderProcessor processing...
102102
2020-06-19 23:19:13.153 INFO 11520 --- [ main] c.lnwazg.workflow.flow.PlaceAnOrderFlow : releaselockInventoryProcessor processing...
103-
```
103+
```
104+
105+
#### 框架功能:
106+
- 支持流程内部任意节点(方法名)之间的跳转。
107+
- 若某个节点的代码逻辑未指定下个节点,则该节点为最后一个节点。
108+
- 可手动指定流程的起始节点名称。若不指定,则默认以@StartNode标注的方法作为起始节点。
109+
- (可选)流程意外中断后继续运行的方案:
110+
在数据库表增加一个flowNode字段,初始状态该字段为空。
111+
执行流程前,将flowNode字段设置到WorkFlowContext的nextNodeName。
112+
每执行一个节点,在节点起始代码位置将节点名称更新到flowNode字段。
113+
若流程意外中断,则数据库的flowNode字段内容停留在上一个未执行完毕的节点位置,那么重新开始流程即可继续执行。
114+
流程重复执行的正确性需要每个流程的代码逻辑做幂等性保障。
115+

src/main/java/com/lnwazg/workflow/engine/WorkFlowEngine.java

+5-2
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,13 @@ public void runWorkFlow(String workFlowName, WorkFlowContext workFlowContext) {
5252
}
5353
logger.info("起始节点:" + startNodeMethod.getName() + ",后续可选节点:" + flowNodeMap.keySet());
5454
try {
55-
startNodeMethod.invoke(workFlow, workFlowContext);
55+
//若未指定第一个节点的名称,则默认从首节点开始执行
56+
if (StringUtils.isEmpty(workFlowContext.getNextNodeName())) {
57+
startNodeMethod.invoke(workFlow, workFlowContext);
58+
}
5659
String nextNodeName = null;
5760
Method nextMethod = null;
58-
//一直执行完所有的流程
61+
//一直执行,直到执行完所有的流程
5962
while (!StringUtils.isEmpty(nextNodeName = workFlowContext.getNextNodeName())) {
6063
nextMethod = flowNodeMap.get(nextNodeName);
6164
if (nextMethod != null) {

0 commit comments

Comments
 (0)