提交间隔

如前所述,Step 会读取和写入条目,并使用提供的 `PlatformTransactionManager` 定期进行提交。如果 `commit-interval` 为 1,则会在写入每个条目后进行提交。在许多情况下,这并不理想,因为启动和提交事务是昂贵的。理想情况下,最好在每个事务中处理尽可能多的条目,这完全取决于正在处理的数据类型以及 Step 与之交互的资源。因此,您可以配置在一次提交中处理的条目数量。

  • 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`,然后提交事务。