【问题标题】:Restart batch job/step in case of some type exception在某些类型异常的情况下重新启动批处理作业/步骤
【发布时间】:2016-01-18 12:47:37
【问题描述】:

我在步骤/阅读器中有一个操作,它可以抛出一些扩展 RuntimeException 的异常。我需要重新开始这一步,以防这个异常被抛出。我尝试过这样的事情:

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

【问题讨论】:

    标签: java spring spring-batch


    【解决方案1】:

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

    这应该像 XML 一样工作:

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

    您可以尝试添加它:exceptionHandler(ExceptionHandler exceptionHandler)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-16
      • 2016-04-29
      相关资源
      最近更新 更多