我在step / reader中有一些操作可以抛出一些扩展RuntimeException的Exception。如果抛出此异常,我需要重新启动此步骤。我尝试过这样的事情:
@Bean
public SimpleRetryPolicy createSimpleRetryPolicy() {
Map<Class<? extends Throwable>, Boolean> map = new HashMap<>();
map.put(Exception.class, true);
return new SimpleRetryPolicy(3, map, true);
}
@Bean
public Step statisticsImportStep(StepBuilderFactory stepBuilderFactory, PageStatusFetcherReader reader, PageStatusFetcherProcessor processor, PageStatusFetcherWriter writer, TaskExecutor taskExecutor, SimpleRetryPolicy simpleRetryPolicy) {
return stepBuilderFactory.get("statisticsImportStep")
.<String, String>chunk(10)
.reader(reader)
.processor(processor)
.writer(writer)
.faultTolerant()
.retryPolicy(simpleRetryPolicy)
.taskExecutor(taskExecutor)
.throttleLimit(20)
.build();
}
但是通过这种方式,我收到了:
org.springframework.batch.core.step.skip.NonSkippableReadException: 阅读期间发生不可跳过的异常
知道如何重新启动这项工作吗?(我无法在读者中尝试{} catch()异常) upd:它不想重新启动任何类型的异常。
答案 0 :(得分:0)
我认为您需要添加ExceptionHandler
来重试托管Exception
。似乎默认实现已经存在:SimpleRetryExceptionHandler
。
这应该像XML一样工作:
<skippable-exception-classes>
<include class="xx.xx.xx.Exception"/>
</skippable-exception-classes>
您可以尝试将其添加到:exceptionHandler(ExceptionHandler exceptionHandler)
我找不到任何实际使用它的例子:(