控制回滚
默认情况下,无论重试还是跳过,从ItemWriter
导致由Step
回滚。如果 skip 配置为
前面所述,从ItemReader
不要导致回滚。
但是,在许多情况下,从ItemWriter
应该
不会导致回滚,因为没有执行任何作使事务无效。
因此,您可以配置Step
以及不应出现的例外情况列表
导致回滚。
-
Java
-
XML
在 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()
.noRollback(ValidationException.class)
.build();
}
在 XML 中,您可以按如下方式控制回滚:
XML 配置
<step id="step1">
<tasklet>
<chunk reader="itemReader" writer="itemWriter" commit-interval="2"/>
<no-rollback-exception-classes>
<include class="org.springframework.batch.item.validator.ValidationException"/>
</no-rollback-exception-classes>
</tasklet>
</step>
事务性读者
基本合同ItemReader
是它仅向前。阶梯缓冲区
reader 输入,以便在回滚时不需要重新读取项目
来自读者。但是,在某些情况下,阅读器是基于的
事务资源(例如 JMS 队列)的顶部。在这种情况下,由于队列是
绑定到回滚的事务,从
队列被放回。因此,您可以将步骤配置为不缓冲
项目。
-
Java
-
XML
以下示例显示了如何在 Java 中创建不缓冲项的读取器:
Java 配置
@Bean
public Step step1(JobRepository jobRepository, PlatformTransactionManager transactionManager) {
return new StepBuilder("step1", jobRepository)
.<String, String>chunk(2, transactionManager)
.reader(itemReader())
.writer(itemWriter())
.readerIsTransactionalQueue()
.build();
}
以下示例演示如何创建不缓冲 XML 中项的读取器:
XML 配置
<step id="step1">
<tasklet>
<chunk reader="itemReader" writer="itemWriter" commit-interval="2"
is-reader-transactional-queue="true"/>
</tasklet>
</step>