Easy Work-简单、易用、傻瓜式的 Java 流程引擎

Easy Work 是什么?

Easy Work 是一个用于 Java 的工作流引擎。它提供了简洁的 API 和 构建模块,便于创建和运行可组合的工作流。

在Easy Work中,工作单元由Work接口表示,工作流则由WorkFlow接口表示。Easy Work 提供了 WorkFlow 接口的6种实现方式:

这些是使用Easy Work创建工作流时所需了解的唯一基本流程。

你无需学习复杂的符号或概念,只需掌握几个易于理解的自然API即可。

如何使用 ?

首先,让我们创建一个 Work:

typescript 复制代码
public class PrintMessageWork implements Work {

    private final String message;

    public PrintMessageWork(String message) {
        this.message = message;
    }

    @Override
    public String execute(WorkContext workContext) {
        System.out.println(message);
        return message;
    }
}

此 Work 将指定消息打印至标准输出。现在假设我们想要创建如下工作流程:

  1. 打印 a 三次
  2. 顺序打印 b c d
  3. 并行执行 e f
  4. 如果并行执行的结果成功,执行 g, 否则执行 h
  5. 最后执行 z

此工作流程说明如下:

  • flow1 是一个 打印 a 的 RepeatFlow,连续执行三次
  • flow2 是一个 依次打印 b c d 的 SequentialFlow, 按照顺序依次执行
  • flow3 是一个 并行打印 e f 的 ParallelFlow, 同时执行
  • flow4 是一个 基于条件判断的 ConditionalFlow,首先执行flow3,如果执行成功(状态为 COMPLETE)则执行 g,否则执行 h
  • flow5 是一个 顺序执行流程 SequentialFlow,保证 顺序执行 flow1 flow2 flow4,最后执行 z

使用Easy Work,此工作流可以通过以下代码段实现:

ini 复制代码
PrintMessageWork a = new PrintMessageWork("a");
PrintMessageWork b = new PrintMessageWork("b");
PrintMessageWork c = new PrintMessageWork("c");
PrintMessageWork d = new PrintMessageWork("d");
PrintMessageWork e = new PrintMessageWork("e");
PrintMessageWork f = new PrintMessageWork("f");
PrintMessageWork g = new PrintMessageWork("g");
PrintMessageWork h = new PrintMessageWork("h");
PrintMessageWork z = new PrintMessageWork("z");

WorkFlow flow = aNewSequentialFlow(
    aNewRepeatFlow(a).times(3),
    aNewSequentialFlow(b,c,d),
    aNewConditionalFlow(
        aNewParallelFlow(e,f).withAutoShutDown(true)
    ).when(
        WorkReportPredicate.COMPLETED,
        g,
        h
    ),
    z
);
aNewWorkFlowEngine().run(flow, new WorkContext());

这不是一个非常有用的工作流,只是为了让你了解如何使用Easy Work而编写工作流。

你可以在 test/java 中 查看更多的测试用例。

更详细的信息,请参考wiki

相关推荐
墨雪不会编程2 分钟前
C++ string 详解:STL 字符串容器的使用技巧
java·开发语言·c++
Lucky GGBond3 分钟前
实践开发:老系统新增字段我是如何用枚举优雅兼容历史数据的
java
悲喜自渡7216 分钟前
Python 编程(gem5 )
java·linux·开发语言
xing-xing38 分钟前
JVM 内存、直接内存、系统内存、本地内存、物理内存总结
java·jvm
yangpipi-38 分钟前
《C++并发编程实战》第5章 C++内存模型和原子操作
android·java·c++
qq_12498707532 小时前
基于微信小程序的电子元器件商城(源码+论文+部署+安装)
java·spring boot·spring·微信小程序·小程序·毕业设计
吃喝不愁霸王餐APP开发者2 小时前
基于Spring Cloud Gateway实现对外卖API请求的统一鉴权与流量染色
java·开发语言
a努力。2 小时前
美团Java面试被问:Redis集群模式的工作原理
java·redis·后端·面试
一雨方知深秋2 小时前
面向对象编程
java·封装·this·构造器·static关键字·成员变量·javabean实体类
资生算法程序员_畅想家_剑魔2 小时前
Java常见技术分享-11-责任链模式
java·spring boot·责任链模式