提交間隔
如前所述,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`,然後提交事務。