提交間隔

如前所述,一個步驟讀取並寫入專案,透過使用提供的 PlatformTransactionManager 定期提交。當 commit-interval 為 1 時,它在寫入每個專案後提交。在許多情況下,這並不理想,因為開始和提交事務的開銷很大。理想情況下,最好在每個事務中處理儘可能多的專案,這完全取決於所處理的資料型別以及步驟與之互動的資源。因此,您可以配置在一次提交中處理的專案數量。

  • 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(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 個專案。在處理開始時,一個事務被啟動。此外,每次在 ItemReader 上呼叫 read 時,計數器都會增加。當它達到 10 時,聚合專案列表被傳遞給 ItemWriter,並且事務被提交。

© . This site is unofficial and not affiliated with VMware.