提交间隔

如前所述,步骤会读取并写入项,并使用提供的 PlatformTransactionManager 定期提交事务。当 commit-interval 设置为 1 时,它会在写入每个单独项后提交事务。在许多情况下,这种做法并不理想,因为启动和提交事务的开销较大。理想情况下,应在每个事务中尽可能多地处理项,这完全取决于所处理数据的类型以及步骤所交互的资源。因此,您可以配置在一次提交中处理的项数。spring-doc.cadn.net.cn

以下示例展示了一个 step,其 taskletcommit-interval 值为 10,如同在 Java 中定义的那样:spring-doc.cadn.net.cn

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(transactionManager)
				.reader(itemReader())
				.writer(itemWriter())
				.build();
}

以下示例展示了一个step,其taskletcommit-interval值为 10,如同在 XML 中定义的那样:spring-doc.cadn.net.cn

XML 配置
<job id="sampleJob">
    <step id="step1">
        <tasklet>
            <chunk reader="itemReader" writer="itemWriter" commit-interval="10"/>
        </tasklet>
    </step>
</job>

在前面的示例中,每个事务处理 10 个项目。在处理开始时,会启动一个事务。此外,每次在ItemReader上调用read时,计数器都会递增。当计数器达到 10 时,聚合后的项目列表会被传递给ItemWriter,并提交事务。spring-doc.cadn.net.cn