在某些类型异常的情况下重新启动批处理作业/步骤

时间:2016-01-18 12:47:38

标签: java spring spring-batch

我在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:它不想重新启动任何类型的异常。

1 个答案:

答案 0 :(得分:0)

我认为您需要添加ExceptionHandler来重试托管Exception。似乎默认实现已经存在:SimpleRetryExceptionHandler

这应该像XML一样工作:

<skippable-exception-classes>
    <include class="xx.xx.xx.Exception"/>
</skippable-exception-classes>

您可以尝试将其添加到:exceptionHandler(ExceptionHandler exceptionHandler)

我找不到任何实际使用它的例子:(