簡體   English   中英

Spring Batch:指定用於處理列表列表的塊大小

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM