[英]Spring batch : Propagate exception encountered in partitioned step (Stop job execution)
[英]Spring Batch Partitioning, how to stop a Job once any of the partitioned step throws exception
我正在运行带有分区步骤的Spring Batch作业,并且如果其中1个分区失败或引发异常,我需要立即停止作业,一旦任何分区步骤引发异常,如何停止作业,因为当前其他分区步骤一直运行直到结束并完成后,作业将以失败的返回代码停止。
代码:: stepBuilderFactory.get(“ masterStep”)。allowStartIfComplete(true).partitioner(multithreadedPartitionerStep).partitioner(“ multithreadedPartitionerStep”,extractJobPartitioner).gridSize(gridSize).taskExecutor(taskExecutor).build();
如果我理解正确,那么您希望Spring Batch Job根据您的步骤输出实现某种行为。
如上文@Jim所述,向我们展示您的分区处理程序。
第一件事-工作就是工作。 它由步骤组成(可以分区)。 如果任一步骤的状态过时,它也会在Job上反映(以通用术语表示)
同样,到现在为止,我猜您可能已经迁移到了较新版本的Spring Batch。 幸运的是,在4.x世界中,除了常规流程外,您还有三个选择。
参考链接- 春季指南
然后您告诉Spring Batch在什么步骤执行什么操作。 这是上面链接的快速浏览:
@Bean
public Job job() {
return this.jobBuilderFactory.get("job")
.start(step1())
.next(step2())
.on("FAILED").end()
.from(step2()).on("*").to(step3())
.end()
.build();
}
在以下情况下,如果步骤2失败,则作业以BatchStatus为FAILED / COMPLETE / WHEREVER的状态停止,而ExitStatus为EARLY TERMINATION的状态终止,并且步骤3不执行。 否则,执行转到步骤3。 另外,如果步骤2失败并且作业重新启动,则执行将再次从步骤2开始。
@Bean
public Job job() {
return this.jobBuilderFactory.get("job")
.start(step1())
.next(step2()).on("FAILED").fail()
.from(step2()).on("*").to(step3())
.end()
.build();
}
和
在以下情况下,如果步骤1以COMPLETE / FAILED / WHEREVER结尾,则作业将停止。 重新启动后,将在步骤2开始执行。
@Bean
public Job job() {
return this.jobBuilderFactory.get("job")
.start(step1()).on("COMPLETED").stopAndRestart(step2())
.end()
.build();
}
在此分区步骤中,如果在任何csv中找到任何不正确的字段数,则将正确报告该字段。 这里,asynctaskexecutor和threadpooltaskexecutor用于分区步骤。
希望它能有所帮助并以某种方式适合您的情况。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.