配置重试逻辑

在大多数情况下,您希望异常导致跳过记录或产生Step次失败。然而, 并非所有异常都是确定性的。如果在读取过程中遇到FlatFileParseException,它总会针对该记录抛出。重置ItemReader并无帮助。 但是,对于其他异常(例如DeadlockLoserDataAccessException,它 表示当前进程尝试更新另一个进程已持有锁的记录),等待并重试可能会成功。spring-doc.cadn.net.cn

在 Java 中,重试应按以下方式配置:spring-doc.cadn.net.cn

@Bean
public Step step1(JobRepository jobRepository, PlatformTransactionManager transactionManager) {
    // retry policy configuration
    int retryLimit = 3;
    var retrybaleExceptions = Set.of(DeadlockLoserDataAccessException.class);
    RetryPolicy retryPolicy = RetryPolicy.builder()
        .maxRetries(retryLimit)
        .includes(retrybaleExceptions)
        .build();

	return new StepBuilder("step1", jobRepository)
				.<String, String>chunk(2).transactionManager(transactionManager)
				.reader(itemReader())
				.writer(itemWriter())
				.faultTolerant()
				.retryPolicy(retryPolicy)
				.build();
}

在 XML 中,重试应按如下方式配置:spring-doc.cadn.net.cn

<step id="step1">
   <tasklet>
      <chunk reader="itemReader" writer="itemWriter"
             commit-interval="2" retry-limit="3">
         <retryable-exception-classes>
            <include class="org.springframework.dao.DeadlockLoserDataAccessException"/>
         </retryable-exception-classes>
      </chunk>
   </tasklet>
</step>

Step 允许限制单个项目可以重试的次数,以及一个“可重试”的异常列表。spring-doc.cadn.net.cn