首页 > 解决方案 > Spring Batch - Spring Batch Retry 和 backoffPolicy 不起作用

问题描述

我的 Spring 批处理配置如下所示:

@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(10)
            .reader(myReader)
            .processor(myProcessor)
            .writer(myWriter)
            .faultTolerant().retryLimit(3).retry(MyException.class)
            .build();
}

@Bean
public MyReader myReader() {
    return new MyReader();
}
@Bean
public MyProcessor myProcessor() {
    return new MyProcessor();
}
@Bean
public MyWriter myWriter() {
    return new MyWriter();
}

所以,当我运行我的应用程序时,我在 StepBuilderFactory 上设置的重试不起作用。另外,我想有一个重试的时间间隔。我看到它是通过 backOffPolicy 实现的。我做了一些挖掘并以下列方式实现它

@Bean
    public Step step1(ItemReader<String> myReader,
                    ItemProcessor<String, String> myProcessor,
                    ItemWriter<String> myWriter) {
        return steps.get("step1").<String, String>chunk(10)
                .reader(myReader)
                .processor(myProcessor)
                .writer(myWriter)
                .faultTolerant().retryLimit(3).retry(MyException.class)
                .backOffPolicy(backoffPolicy())
                .build();
    }

下面是代码backoffpolicy方法:

@Bean
    public BackOffPolicy backoffPolicy() {
        ExponentialBackOffPolicy exponentialBackOffPolicy = new ExponentialBackOffPolicy();
        exponentialBackOffPolicy.setInitialInterval(1000);
        exponentialBackOffPolicy.setMultiplier(2.0);
        exponentialBackOffPolicy.setMaxInterval(10000);
        return exponentialBackOffPolicy;
    }

我重试的主要目的是在我的 ItemReader 中我将调用一个存储过程。因此,如果发生死锁,我想在 n 分钟后重试。我还想重试 ItemWriter 以及它将写入文件。我希望 retry 和 backoffPolicy (以便我可以设置 ItemReader 和 ItemWriter 应该重试的时间间隔)在我的代码上工作。有人可以告诉我我的代码哪里出错了。提前致谢。

标签: javaspring-bootspring-batchbatch-processing

解决方案


推荐阅读