重试不使用带有 Java 配置的 Spring Batch

ade*_*sai 2 java spring-batch spring-retry spring-boot

我有以下配置的 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(1)
            .reader(myReader)
            .faultTolerant().retryLimit(3).retry(MyException.class)
            .processor(myProcessor)
            .writer(myWriter)
            .build();
}

@Bean
@StepScope
public MyReader myReader() {
    return new MyReader();
}
@Bean
public MyProcessor myProcessor() {
    return new MyProcessor();
}
@Bean
public MyWriter myWriter() {
    return new MyWriter();
}
Run Code Online (Sandbox Code Playgroud)

当 MyReader 类抛出 MyException 时,它会停止作业的执行,而不用以下堆栈跟踪重试:

2019-05-16 14:45:09.460 ERROR 22485 --- [           main] o.s.batch.core.step.AbstractStep         : Encountered an error executing step step1 in job myJob

org.springframework.batch.core.step.skip.NonSkippableReadException: Non-skippable exception during read
    at org.springframework.batch.core.step.item.FaultTolerantChunkProvider.read(FaultTolerantChunkProvider.java:105) ~[spring-batch-core-4.0.1.RELEASE.jar:4.0.1.RELEASE]
    at org.springframework.batch.core.step.item.SimpleChunkProvider$1.doInIteration(SimpleChunkProvider.java:116) ~[spring-batch-core-4.0.1.RELEASE.jar:4.0.1.RELEASE]
Run Code Online (Sandbox Code Playgroud)

Mah*_*ine 6

当 MyReader 类抛出 MyException 时,它会停止作业的执行而不重试

重试策略不适用于项目阅读器。因此,即使您将异常声明为可重试并且该异常从读取器中抛出,也不会调用重试策略。

重试策略仅适用于处理器和写入器。