繁体   English   中英

Spring Batch分区,如何在任何分区步骤引发异常后停止作业

[英]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世界中,除了常规流程外,您还有三个选择。

  1. 一步一步结束
  2. 失步
  3. 在给定步骤停止作业

参考链接- 春季指南

然后您告诉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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM