My Spring batch configuration looks like this:
@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();
}
so, when I am running my application the retry that I had set on the StepBuilderFactory is not working. Also, I would like to have a timed interval for the retry. I see that its implemented via backOffPolicy. I did some digging and implemented it in the following way
@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();
}
The following is the code backoffpolicy method:
@Bean
public BackOffPolicy backoffPolicy() {
ExponentialBackOffPolicy exponentialBackOffPolicy = new ExponentialBackOffPolicy();
exponentialBackOffPolicy.setInitialInterval(1000);
exponentialBackOffPolicy.setMultiplier(2.0);
exponentialBackOffPolicy.setMaxInterval(10000);
return exponentialBackOffPolicy;
}
My main intention for Retry is that in my ItemReader I will be calling a stored procedure. So, if there occurs a deadlock I want to retry after n number of minutes. I also want retry on the ItemWriter as well as it will be writing to a file. I want both retry and backoffPolicy (so that I can set an interval on when my ItemReader and ItemWriter should retry again) working on my code. Can someone tell me where I am going wrong in my code. Thanks in advance.