来源:https://blog.csdn.net/Dream_Weave/article/details/106711169
- 源代码名称:easy-flows
- 源代码网址:http://www.github.com/j-easy/easy-flows
https://gitee.com/xiaoka2017/easy-flow
Java的工作流引擎, 它提供简单的api和构建块,以方便创建和运行可以组合工作流。
简单流程中的工作单元由 Work
接口表示。 工作流由 WorkFlow
接口表示。 轻松流提供 WorkFlow
接口的4实现:
这些是你需要知道的唯一基本流,以便开始创建简单流程的工作流。 你不需要学习复杂的符号或者概念,只是一些简单易于思考的自然 api。
它是如何工作的?
首先,让我们写一些Work:
class PrintMessageWork implements Work {
private String message;
public PrintMessageWork(String message) {
this.message = message;
}
public String getName() {
return "print message work";
}
public WorkReport call(WorkContext workContext) {
System.out.println(message);
return new DefaultWorkReport(WorkStatus.COMPLETED, workContext);
}
}
这里工作单元将给定消息打印到标准输出。 现在假设我们想创建以下工作流:
- 打印"foo"三次
- 然后并行打印"hello"和"world"
- 如果"hello"和"world"都已经成功打印到控制台,则打印"ok",否则打印"nok"
这里工作流可以如下所示:
flow1
是work1
的RepeatFlow
,它打印"foo"三次flow2
是work2
和work3
的ParallelFlow
,它并行地打印"hello"和"world"flow3
是一个ConditionalFlow
,它先执行flow2
( 工作流也是工作),如果flow2
完成,则执行work4
,否则将分别打印“ok”和“nok”。flow4
是一个SequentialFlow
它执行flow1
,然后按顺序执行flow3
。
通过轻松流,可以使用以下代码段实现这里工作流:
PrintMessageWork work1 = new PrintMessageWork("foo");
PrintMessageWork work2 = new PrintMessageWork("hello");
PrintMessageWork work3 = new PrintMessageWork("world");
PrintMessageWork work4 = new PrintMessageWork("ok");
PrintMessageWork work5 = new PrintMessageWork("nok");
ExecutorService executorService = Executors.newFixedThreadPool(2);
WorkFlow workflow = aNewSequentialFlow() // flow 4
.execute(aNewRepeatFlow() // flow 1
.named("print foo 3 times")
.repeat(work1)
.times(3)
.build())
.then(aNewConditionalFlow() // flow 3
.execute(aNewParallelFlow(executorService) // flow 2
.named("print 'hello' and 'world' in parallel")
.execute(work2, work3)
.build())
.when(WorkReportPredicate.COMPLETED)
.then(work4)
.otherwise(work5)
.build())
.build();
WorkFlowEngine workFlowEngine = aNewWorkFlowEngine().build();
WorkContext workContext = new WorkContext();
WorkReport workReport = workFlowEngine.run(workflow, workContext);
executorService.shutdown();
这不是一个非常有用的工作流程,但是只是为了给你一个简单的流程编写工作流。 你可以在中找到关于所有这一切的更多细节。