2016-01-18 45 views
1

我在步驟/讀取器中有可能拋出一些擴展了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:它不想重新啓動任何類型的異常。

回答

0

我想你需要添加一個ExceptionHandler重試管理Exception。看起來默認實現已經存在:SimpleRetryExceptionHandler

這應該像XML:

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

你可以嘗試用它添加此:exceptionHandler(ExceptionHandler exceptionHandler)

我無法找到如何實際使用,雖然它的任何實例:(

相關問題