У меня есть пакетное задание 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();
}
Когда класс 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]