Configuring Retry Logic

在大多数情况下,你想要异常导致跳过或 Step 失败。然而,并不是所有异常都是确定的。如果在读取时遇到 FlatFileParseException,则始终为该记录抛出该异常。重置 ItemReader 没有任何帮助。但是,对于其他异常(例如指示当前进程已尝试更新另一个进程持有锁定的记录的 DeadlockLoserDataAccessException),等待并重试可能会成功。

Java

在 Java 中,应按如下方式配置重试:

@Bean
public Step step1(JobRepository jobRepository, PlatformTransactionManager transactionManager) {
	return new StepBuilder("step1", jobRepository)
				.<String, String>chunk(2, transactionManager)
				.reader(itemReader())
				.writer(itemWriter())
				.faultTolerant()
				.retryLimit(3)
				.retry(DeadlockLoserDataAccessException.class)
				.build();
}
XML

在 XML 中,应按如下方式配置重试:

<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`允许设置个人项目可以重试的次数限制以及已设置 "`retryable`"的异常列表。您可以在retry中找到重试的工作原理的更多详细信息。