配置重试逻辑
在大多数情况下,您希望异常导致跳过或 Step 失败。但是,并非所有异常都是确定性的。如果在读取时遇到 FlatFileParseException,则该记录始终会抛出此异常。重置 ItemReader 无济于事。但是,对于其他异常(例如 DeadlockLoserDataAccessException,它表示当前进程试图更新另一个进程持有的锁的记录),等待并再次尝试可能会成功。
-
Java
-
XML
在 Java 中,重试应按如下配置
@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 中,重试应按如下配置
<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 允许限制单个项目可以重试的次数,以及“可重试”异常的列表。