对于最新稳定版本,请使用Spring Batch Documentation 6.0.0spring-doc.cadn.net.cn

控制回滚

默认情况下,无论重试还是跳过,任何来自ItemWriter导致由回滚。如果 skip 配置为 前面提到的例外情况来自ItemReader不要造成回滚。 然而,在许多情况下,会从以下情况中投掷出例外ItemWriter应该 不会导致回滚,因为没有任何作使该交易无效。 因此,你可以配置但有一些不该有的例外 导致回滚。spring-doc.cadn.net.cn

在 Java 中,你可以按以下方式控制回滚:spring-doc.cadn.net.cn

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 中,你可以按以下方式控制回滚:spring-doc.cadn.net.cn

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它仅为前进。步进缓冲区 读取器输入,这样在回滚时,这些项就不需要重新读取 来自读者。不过,有些情境下读者会被建立在基础上 位于事务资源顶部,如JMS队列。在这种情况下,由于队列是 与被回滚的交易绑定的,从中拉取的消息 队列重新装上。因此,你可以配置步不缓冲 项目。spring-doc.cadn.net.cn

以下示例展示了如何在 Java 中创建不缓冲项目的阅读器:spring-doc.cadn.net.cn

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 中的阅读器:spring-doc.cadn.net.cn

XML 配置
<step id="step1">
    <tasklet>
        <chunk reader="itemReader" writer="itemWriter" commit-interval="2"
               is-reader-transactional-queue="true"/>
    </tasklet>
</step>