# TaskFlow **Repository Path**: coshining/task-flow ## Basic Information - **Project Name**: TaskFlow - **Description**: Java任务编排 - **Primary Language**: Java - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-06 - **Last Updated**: 2025-11-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 任务流编排 简单的任务流编排,可实现流式任务编排,方便自定义每步的回滚操作。 # 使用方式 ## step1. 创建任务 ### 运行任务 继承`AbstractRunTask`,实现`run`方法即可,返回`String`结果,表示任务运行结果。 ```java public class FirstSuccessTask extends AbstractRunTask { @Override public String run() { log.info("firstTask run"); return "SUCCESS"; } } ``` 同时也可实现`rollback`方法,只有当`run`方法抛出异常时,`rollback`方法才会执行。 并且还有`run`方法前置、后置函数,可分别在`run`方法执行前、后执行。`rollback`方法同理。 ### 完成任务 继承`AbstractFinishTask`,实现`finish`方法即可,返回`String`结果,表示任务运行结果。 ```java public static class FinishTask extends AbstractFinishTask { @Override public void finish() { super.finish(); log.info("finishTask finish"); } } ``` 父类中`finish`方法有固定实现:清空上下文变量。 同样的,`finish`方法也有前后置函数。 ## step1. 创建任务流对象 ```java TaskFlowOrchestration taskFlow = new TaskFlowOrchestration(); ``` ## step2. 添加任务 ```java taskFlow.start(FirstTask.class) .next(FirstTask.class, SecondTask.class, "SUCCESS") .next(SecondTask.class, ThirdTask.class, "SUCCESS") .next(ThirdTask.class, FourthTask.class, "SUCCESS") .end(FourthTask.class, FinishTask.class, "SUCCESS"); ``` 从`FirstTask.class`开始,当`FirstTask.class`的运行结果是`"SUCCESS"`时,`SecondTask.class`运行,运行结果是`"SUCCESS"`时,`ThirdTask.class`运行,运行结果是`"SUCCESS"`时,依次运行,最后`FinishTask.class`运行。 如果有分支任务,可以继续编排,添加分支任务:当`FirstTask.class`的运行结果是`R"FAIL"`时,`OtherTask.class`运行,运行结果是`"SUCCESS"`时,`ThirdTask.class`运行,回到上面定义的`ThirdTask.class`运行结果分支。 ```java taskFlow.next(FirstTask.class, OtherTask.class, "FAIL") .next(OtherTask.class, ThirdTask.class, "SUCCESS") ``` 如果有其他结束方式,则可按照如下方式编排: ```java taskFlow.next(SecondTask.class, OtherTask.class, "FAIL") .end(OtherTask.class, OtherFinishTask.class, "SUCCESS"); ``` ## step3. 启动任务 ```java taskFlow.excecute(); ``` > 注意:可以有多个结束任务,但是只能有一个起始任务,并且必须由`start`函数添加。 ## step4. 设置上下文 每一个继承了`AbstractRunTask`或者`AbstractFinishTask`的类,都可以设置上下文变量。 ```java public class FirstSuccessTask extends AbstractRunTask { @Override public String run() { log.info("firstTask run"); setContextValue("key", "value"); return "SUCCESS"; } } public class SecondTask extends AbstractRunTask { @Override public String run() { log.info("secondTask run"); log.info("key: {}", getContextValue("key")); return "SUCCESS"; } } ``` 建议在`AbstractFinishTask`的中将自定义的上下文清空: ```java public static class FinishTask extends AbstractFinishTask { @Override public void finish() { super.finish(); log.info("finishTask finish"); setContextValue("key", null); } } ```