我正在使用分区步骤运行Spring批处理作业,如果1分区失败或抛出异常,我需要立即停止作业,如果任何分区步骤抛出异常,如何停止作业,就像当前其他分区步骤一样保持运行直到结束,完成后,作业将以不成功的返回码停止。
Code :: stepBuilderFactory.get(“masterStep”)。allowStartIfComplete(true).partitioner(multithreadedPartitionerStep) .partitioner(“multithreadedPartitionerStep”,extractJobPartitioner).gridSize(gridSize) .taskExecutor(了taskExecutor).build();
答案 0 :(得分:0)
如果我的理解正确,您希望Spring Batch Job根据您的步骤输出来实现某种行为。
如上所述,@ Jim,向我们展示您的分区处理程序。
第一件事-工作就是工作。它由步骤组成(可以分区)。如果任一步骤的状态过时,它也会在Job上反映(以通用术语表示)
现在,到目前为止,您可能已经转移到了较新版本的Spring Batch。幸运的是,在4.x世界中,除了常规流程外,您还有三个选择。
参考链接-Spring Guides
然后您告诉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();
}
在this分区步骤中,如果在任何csv中发现任何数量不正确的字段,则将正确报告该错误。这里,asynctaskexecutor和threadpooltaskexecutor用于分区步骤。
希望它会有所帮助,并以某种方式适合您的情况。