提交间隔
如前所述,一个步骤读取和写入项目,并使用提供的 PlatformTransactionManager
定期提交。使用 commit-interval
为 1,它会在写入每个单独项目后提交。在许多情况下,这并不理想,因为开始和提交事务很昂贵。理想情况下,最好在每个事务中处理尽可能多的项目,这完全取决于正在处理的数据类型以及步骤交互的资源。因此,您可以配置在一次提交中处理的项目数量。
-
Java
-
XML
以下示例展示了一个在 Java 中定义的 step
,其 tasklet
的 commit-interval
值为 10。
Java 配置
@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)
.reader(itemReader())
.writer(itemWriter())
.build();
}
以下示例展示了一个在 XML 中定义的 step
,其 tasklet
的 commit-interval
值为 10。
XML 配置
<job id="sampleJob">
<step id="step1">
<tasklet>
<chunk reader="itemReader" writer="itemWriter" commit-interval="10"/>
</tasklet>
</step>
</job>
在前面的示例中,每个事务处理 10 个项目。在处理开始时,会启动一个事务。此外,每次在 ItemReader
上调用 read
时,都会递增一个计数器。当计数器达到 10 时,聚合的项目列表将传递给 ItemWriter
,并且事务将被提交。