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