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