提交間隔

如先前所述,一個 step 讀取和寫出 item,並定期使用提供的 PlatformTransactionManager 提交。當 commit-interval 為 1 時,它會在寫入每個 item 後提交。在許多情況下,這並非理想的做法,因為開始和提交交易的成本很高。理想情況下,最好在每次交易中處理盡可能多的 item,這完全取決於正在處理的資料類型以及 step 正在互動的資源。因此,您可以設定在一次提交中處理的 item 數量。

  • Java

  • XML

以下範例顯示了一個 step,其 taskletcommit-interval 值為 10,如在 Java 中定義的那樣

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();
}

以下範例顯示了一個 step,其 taskletcommit-interval 值為 10,如在 XML 中定義的那樣

XML 設定
<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,並且交易會提交。