spring-batch - 如何在春季批处理中的另一个流中定义并行子流?
问题描述
我想在 Spring Batch 中实现如下的流程结构。
Job
/ \
Flow1 Flow2
/ \
Step1 Step2
/ / \
/ Step3 Flow3
/ \
/ Step4
\ /
\ /
\ /
Step5
作业配置伪代码如下:
@Configuration
public class JobConfiguration {
......
@Bean
public Job Job() {
Flow flow1 = new FlowBuilder<SimpleFlow>("flow1")
.start(step1())
.build();
Flow flow2 = new FlowBuilder<SimpleFlow>("flow2")
.start(step2())
.next(step3())
.split(new SimpleAsyncTaskExecutor()).add(flow3)
.build();
Flow flow3 = new FlowBuilder<SimpleFlow>("flow3")
.start(step4())
.build();
return jobBuilderFactory.get("job")
.incrementer(new RunIdIncrementer())
.start(flow1)
.split(new SimpleAsyncTaskExecutor()).add(flow2)
.next(Step5())
.end()
.build();
}
......
}
当我运行批处理时,日志显示执行了 step1、step2、step3 和 step5,但没有运行 step4。
我想知道如何在另一个流程中定义子流程,上面的代码是实现它的正确方法吗?
提前致谢!
解决方案
单独运行每个流程表明这是正确的,但Flow1
不是。仅运行:Flow3
Flow2
Flow2
return jobBuilderFactory.get("job")
.incrementer(new RunIdIncrementer())
.start(flow2)
.build()
.build();
显示执行了 step2 和 step3,但没有执行 step4。所以问题在于这个流程的定义。
您需要定义 and 之间的并行流Step3
,Flow3
就像您对Flow1
and所做的那样Flow2
。这是一个例子:
@Bean
public Job Job() {
Flow flow1 = new FlowBuilder<SimpleFlow>("flow1")
.start(step1())
.build();
Flow flow3 = new FlowBuilder<SimpleFlow>("flow3")
.start(step4())
.build();
Flow parallelFlow = new FlowBuilder<SimpleFlow>("parallelFlow")
.start(step3())
.split(new SimpleAsyncTaskExecutor()).add(flow3)
.build();
Flow flow2 = new FlowBuilder<SimpleFlow>("flow2")
.start(step2())
.next(parallelFlow)
.build();
return jobs.get("job")
.incrementer(new RunIdIncrementer())
.start(flow1)
.split(new SimpleAsyncTaskExecutor()).add(flow2)
.next(step5())
.end()
.build();
}
希望这可以帮助。
推荐阅读
- json - 在 Angular 中覆盖本地 JSON 文件
- mongodb - 在 MongoDB 4.2 中更新或插入文档的最快方法
- swagger - 在 Linux Centos 7 中安装 swagger-php 和 Composer
- python-3.x - Python 3.7 无法合并 2 个数据框
- java - 在同一个表中保存多种类型的对象的最佳方法?
- elasticsearch - 从查询结果中仅过滤匹配的数据
- c# - 如何在 Visual Studio 扩展 (VSIX) 中检测 CMake 项目加载
- json - 将 JSON 对象的输出格式化为更易读的格式
- android - 如何修复“启动屏幕上的 Android 应用程序冻结”活动?
- css - 如何使我的图像重叠在另一个图像上响应