在Spring Batch中实现容错

时间:2019-05-16 15:32:22

标签: java spring-boot spring-batch spring-retry

我在Spring Batch配置中实现了以下批处理作业:

@Bean
public Job myJob(Step step1, Step step2, Step step3) {
    return jobs.get("myJob").start(step1).next(step2).next(step3).build();
}

@Bean
public Step step1(ItemReader<String> myReader,
        ItemProcessor<String, String> myProcessor,
        ItemWriter<String> myWriter) {
    return steps.get("step1").<String, String>chunk(1)
            .reader(myReader)
            .processor(myProcessor)
            .writer(myWriter)
            .build();
}

我想在某些异常下重试step1(以及step2和step3等),并在出现任何故障时(也包括重试之间)回滚作业。我了解回滚将不会自动进行,并且我很清楚在编写自定义代码后每一步都需要回滚什么。

实现此目标的最佳方法是什么?

2 个答案:

答案 0 :(得分:0)

Spring框架提供@Retryable和@Recover批注以重试并在出现故障时恢复。您可以查看这篇文章。 https://www.baeldung.com/spring-retry

答案 1 :(得分:0)

Spring Batch中的容错功能将应用于面向块的步骤中的项目,而不是应用于整个步骤。

您可以尝试做的是使用带有决策程序的流程,如果后续步骤之一发生异常,则从步骤1重新启动。