繁体   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