[英]Spring Batch: Specifying chunk size for processing List of Lists
我正在處理包含數據庫中多個記錄List
的列表。
如何為處理每個子列表指定塊大小?
我的步驟中確實有塊配置,該配置適用於子列表的數量,而不是子列表的內容。
我的用例是,每個子列表可以包含5000-10000個要處理的記錄,並且可以有4-5個這樣的列表,不想在一個塊中處理所有這些。
感謝您的幫助,在此先感謝。
這是不可能的。 塊大小(commit-interval)是一個塊中的項目數。 如果您的項目是一個列表(無論此列表中有多少個項目),則塊大小將是在一個事務中要讀取/處理/寫入的列表數。
您可以像這樣實現CompletionPolicy
<batch:step id="step1">
<batch:tasklet>
<batch:chunk reader="itemReader" processor="processor"
writer="itemWriter" chunk-completion-policy="completionPolicy">
</batch:chunk>
</batch:tasklet>
</batch:step>
使用CompletionPolicy,您可以根據列表動態控制塊大小。
public class RandomChunkSizePolicy implements CompletionPolicy {
private int chunkSize;
private int totalProcessed;
public boolean isComplete(RepeatContext context) {
return totalProcessed >= chunkSize;
}
public boolean isComplete(RepeatContext context, RepeatStatus status)
{
if (RepeatStatus.FINISHED == status) {
return true;
} else {
return isComplete(context);
}
}
public RepeatContext start(RepeatContext context) {
Random random = new Random();
chunkSize = random.nextInt(20);
totalProcessed = 0;
System.out.println("The chunk size has been set to " + chunkSize);
return context;
}
public void update(RepeatContext context) {
totalProcessed++;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.