|
当前版本仍在开发中,尚不被视为稳定版本。最新稳定版请使用 Spring Batch 文档 6.0.2! |
提交间隔
正如前面提到的,step 会读取并写出 item,并借助提供的 PlatformTransactionManager
定期提交事务。如果 commit-interval 为 1,那么每写出一个 item 就会提交一次。
在很多场景下,这并不是理想方案,因为开启和提交事务本身是有成本的。
理想情况下,应当尽量在每个事务中处理更多 item,但这完全取决于所处理的数据类型,
以及 step 交互的外部资源。因此,你可以配置每次提交事务前要处理的 item 数量。
-
Java
-
XML
下面的示例展示了如何在 Java 中定义一个 tasklet 的 commit-interval 为 10 的 step:
Java Configuration
@Bean
public Job sampleJob(JobRepository jobRepository, Step step1) {
return new JobBuilder("sampleJob", jobRepository)
.start(step1)
.build();
}
@Bean
public Step step1(JobRepository jobRepository, PlatformTransactionManager transactionManager) {
return new StepBuilder("step1", jobRepository)
.<String, String>chunk(10).transactionManager(transactionManager)
.reader(itemReader())
.writer(itemWriter())
.build();
}
下面的示例展示了如何在 XML 中定义一个 tasklet 的 commit-interval 为 10 的 step:
XML Configuration
<job id="sampleJob">
<step id="step1">
<tasklet>
<chunk reader="itemReader" writer="itemWriter" commit-interval="10"/>
</tasklet>
</step>
</job>
在前面的示例中,每个事务会处理 10 个 item。处理开始时,会先开启一个事务。
之后每次调用 ItemReader 的 read 方法,计数器都会加一。
当计数达到 10 时,聚合后的 item 列表就会传递给 ItemWriter,随后提交事务。