【发布时间】:2021-05-21 07:43:43
【问题描述】:
我恶意编写了一个代码来检查批处理流程是如何工作的。
@Bean
public Step conditionalJobStep1() {
return stepBuilderFactory.get("step1")
.tasklet((contribution, chunkContext) -> {
log.info(">>>>> This is stepNextConditionalJob Step1");
return RepeatStatus.FINISHED;
}).build();
}
@Bean
public Step conditionalJobStep2() {
return stepBuilderFactory.get("conditionalJobStep2")
.tasklet((contribution, chunkContext) -> {
log.info(">>>>> This is stepNextConditionalJob Step2");
return RepeatStatus.FINISHED;
}).build();
}
@Bean
public Step conditionalJobStep3() {
return stepBuilderFactory.get("conditionalJobStep3")
.tasklet((contribution, chunkContext) -> {
log.info(">>>>> This is stepNextConditionalJob Step3");
return RepeatStatus.FINISHED;
}).build();
}
这里是步骤和小任务。
@Bean
public Job stepNextConditionalJob() {
return jobBuilderFactory.get("stepNextConditionalJob")
.start(conditionalJobStep1())
.on("FAILED")
.to(conditionalJobStep3())
.on("*")
.end()
.from(conditionalJobStep1())
.on("*")
.to(conditionalJobStep3())
.next(conditionalJobStep2())
.on("*")
.to(conditionalJobStep1())
.on("*")
.end()
.end()
.build();
}
以上代码结果 1->3->2->1->3->2->1->..... inf. 我想是什么让这种流动。
我的想法:Step1 没有失败,所以 start(1) -> to(1) & from(1) -> (3) -> (2) -> to(1) & from(1) -> (3) -> (2) -> ...
但是当我像这个工作一样只修改了 2 个数字时(在 from(step1) 之后从上一个代码只更改了 Step2 和 Step3 的代码)结果只是 1->2->3->Job end。
@Bean
public Job stepNextConditionalJob() {
return jobBuilderFactory.get("stepNextConditionalJob")
.start(conditionalJobStep1())
.on("FAILED")
.to(conditionalJobStep3())
.on("*")
.end()
.from(conditionalJobStep1())
.on("*")
.to(conditionalJobStep2())
.next(conditionalJobStep3())
.on("*")
.to(conditionalJobStep1())
.on("*")
.end()
.end()
.build();
}
自己的很多实验都是在“开始”之后与“to”相关的。
我不知道为什么会这样。
是什么造成了这种差异?
【问题讨论】:
-
不,我已经知道这个过程。我只是改变了两个相同步骤的顺序,但我问是因为我对正常工作的结束和无限过程感到好奇。
标签: spring spring-boot spring-batch batch-processing