Spring Batch Partitioning,如果任何分区步骤抛出异常,如何停止作业

时间:2016-02-02 07:22:10

标签: java spring spring-batch

我正在使用分区步骤运行Spring批处理作业,如果1分区失败或抛出异常,我需要立即停止作业,如果任何分区步骤抛出异常,如何停止作业,就像当前其他分区步骤一样保持运行直到结束,完成后,作业将以不成功的返回码停止。

Code :: stepBuilderFactory.get(“masterStep”)。allowStartIfComplete(true).partitioner(multithreadedPartitionerStep)                 .partitioner(“multithreadedPartitionerStep”,extractJobPartitioner).gridSize(gridSize)                 .taskExecutor(了taskExecutor).build();

1 个答案:

答案 0 :(得分:0)

如果我的理解正确,您希望Spring Batch Job根据您的步骤输出来实现某种行为。

如上所述,@ Jim,向我们展示您的分区处理程序。

第一件事-工作就是工作。它由步骤组成(可以分区)。如果任一步骤的状态过时,它也会在Job上反映(以通用术语表示)

现在,到目前为止,您可能已经转移到了较新版本的Spring Batch。幸运的是,在4.x世界中,除了常规流程外,您还有三个选择。

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

参考链接-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用于分区步骤。

希望它会有所帮助,并以某种方式适合您的情况。