这是一个或许对你有用的社群 一对一交流/面试小册/简历优化/求职解惑欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料《项目实战视频》从书中学往事中“练”《互联网高频面试题》面朝简历学习春暖花开《架构 x 系统设计》摧枯拉朽掌控面试高频场景题《精进 Java 学习指南》系统学习互联网主流技术栈《必读 Java 源码专栏》知其然知其所以然这是一个或许对你有用的开源项目国产Star破10w的开源项目前端包括管理后台、微信小程序后端支持单体、微服务架构RBAC权限、数据权限、SaaS多租户、商城、支付、工作流、大屏报表、ERP、CRM、AI大模型、IoT物联网等功能多模块https://gitee.com/zhijiantianya/ruoyi-vue-pro微服务https://gitee.com/zhijiantianya/yudao-cloud视频教程https://doc.iocoder.cn【国内首批】支持 JDK17/21SpringBoot3、JDK8/11Spring Boot2双版本来源juejin.cn/post/7579476335556886563Easy Work 是什么?如何使用 暂停工作流JSON构建工作流Easy Work 是什么?Easy Work 是一个用于 Java 的工作流引擎。它提供了简洁的 API 和 构建模块便于创建和运行可组合的工作流。在Easy Work中工作单元由Work接口表示工作流则由WorkFlow接口表示。Easy Work 提供了 WorkFlow 接口的6种实现方式。这些是使用Easy Work创建工作流时所需了解的唯一基本流程。你无需学习复杂的符号或概念只需掌握几个易于理解的自然API即可。基于 Spring Boot MyBatis Plus Vue Element 实现的后台管理系统 用户小程序支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能项目地址https://github.com/YunaiV/ruoyi-vue-pro视频教程https://doc.iocoder.cn/video/如何使用 首先让我们创建一个 Work:public class PrintMessageWork implements Work { privatefinal String message; public PrintMessageWork(String message) { this.message message; } Override public String execute(WorkContext workContext) { System.out.println(message); return message; } }此 Work 将指定消息打印至标准输出。现在假设我们想要创建如下工作流程打印 a 三次顺序打印 b c d并行执行 e f如果并行执行的结果成功执行 g, 否则执行 h最后执行 z此工作流程说明如下flow1是一个 打印 a 的RepeatFlow连续执行三次flow2是一个 依次打印 b c d 的SequentialFlow 按照顺序依次执行flow3是一个 并行打印 e f 的ParallelFlow 同时执行flow4是一个 基于条件判断的ConditionalFlow首先执行flow3如果执行成功状态为 COMPLETE则执行 g否则执行 hflow5是一个 顺序执行流程SequentialFlow保证 顺序执行flow1flow2flow4最后执行 z使用Easy Work此工作流可以通过以下代码段实现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());基于 Spring Cloud Alibaba Gateway Nacos RocketMQ Vue Element 实现的后台管理系统 用户小程序支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能项目地址https://github.com/YunaiV/yudao-cloud视频教程https://doc.iocoder.cn/video/暂停工作流从 v1.0.5开始 EasyWork工作流支持 断点 通过断点 你可以暂停执行工作流做一些其他事情然后恢复执行工作流。你可以在工作流的任何位置配置断点。例如你可以将断点设置在c工作单元上然后恢复执行。此工作流说明如下此工作流可以通过以下代码段实现SequentialFlow flow aNewSequentialFlow( aNewRepeatFlow(a).times(3), aNewSequentialFlow(b,aNamePointWork(c).point(C_BREAK_POINT),d), aNewConditionalFlow( aNewParallelFlow(e,f).withAutoShutDown(true) ).when( WorkReportPredicate.COMPLETED, g, h ), z ); //执行到改断点并暂停 flow.execute(C_BREAK_POINT); System.out.println(execute to the break point C_BREAK_POINT); //从断点处继续执行直到完成 flow.execute();JSON构建工作流从 V1.0.8开始 EasyWork工作流支持基于 JSON 的构建你可以通过 JSON 的方式构建任意复杂的工作流。 基于以上图示中的例子通过 JSON 构建工作流的片段为(example.json){ type: sequential, works: [{ type: repeat, times: 3, work: { type: work.PrintMessageWork, message: a } },{ type: sequential, works: [{ type: work.PrintMessageWork, message: b },{ type: work.PrintMessageWork, message: c },{ type: work.PrintMessageWork, message: d }] },{ type: conditional, decide: { type: parallel, autoShutdown: true, works: [{ type: work.PrintMessageWork, message: e },{ type: work.PrintMessageWork, message: f }] }, predicate: { left : $status, operator: eq, right: COMPLETED }, trueWork: { type: work.PrintMessageWork, message: g }, falseWork: { type: work.PrintMessageWork, message: h } }], then: { type: work.PrintMessageWork, message: z } }你可以通过以下代码反序列化工作流并进行执行更多例子请参考test/java/DeserializeTest)String json ResourceReader.readJSON(json/example.json); SequentialFlow sequentialFlow (SequentialFlow) deserialize(json); sequentialFlow.execute(new WorkContext());这不是一个非常有用的工作流只是为了让你了解如何使用Easy Work而编写工作流。你可以在test/java中 查看更多的测试用例。开源地址https://gitee.com/ifrog/easy-work欢迎加入我的知识星球全面提升技术能力。 加入方式“长按”或“扫描”下方二维码噢星球的内容包括项目实战、面试招聘、源码解析、学习路线。文章有帮助的话在看转发吧。 谢谢支持哟 (*^__^*