|
当前版本仍在开发中,尚不被视为稳定版本。最新稳定版请使用 Spring Batch 文档 6.0.2! |
配置重试逻辑
在大多数情况下,你希望异常要么导致跳过,要么导致 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 允许你为单个 item 设置可重试次数上限,
并指定一组被视为“可重试”的异常类型。