Spring Batch:一次处理多条记录 [英] Spring batch: processing multiple record at once
问题描述
我使用的是Spring Batch,和往常一样,我有阅读器、处理器和写入器。
我有两个问题
1> 读取器查询所有200条记录(表中的总记录大小是200,我给出了pageSize=200),因此它得到了所有200条记录,而在处理器中,我们需要所有这些记录的列表,因为我们必须将每条记录与其他199条记录进行比较,以便将它们分组到不同的层中。 因此,我在想,如果我们可以在处理步骤中获得该列表,我就可以对它们进行操作。我应该如何处理。
2> 在处理阶段,我需要数据库中的一些主数据,这取决于要处理的所有输入记录。我考虑在处理Bean中注入数据源,获取所有主表数据并处理所有记录。这是一种好的方法吗?或者请提出不同的建议。
<job id="sampleJob">
<step id="step1">
<tasklet>
<chunk reader="itemReader" processor="processor" writer="itemWriter" commit-interval="20"/>
</tasklet>
</step>
</job>
并且处理器是
@Override
public User process(Object item) throws Exception {
// transform item to user
return user;
}
我想要
public List<User> process(List<Object> item) throws Exception {
// transform item to user
return user;
}
我找到一些帖子here,但是他们说要在Writer中获取列表。但是我不喜欢在Writer中处理任何东西,因为这会扼杀Writer和Processor的定义。是否有任何配置可在此进程方法内获取列表。
谢谢
推荐答案
由于ItemProcessor
接收您从ItemReader
返回的任何内容,因此您需要您的ItemReader
返回List
。该List
实际上是您正在处理的"项"。Spring Batch示例中有一个这样的示例。AggregateItemReader
从委托ItemReader
读取所有项,并将它们作为单个列表返回。您可以在Github上查看:https://github.com/spring-projects/spring-batch/blob/master/spring-batch-samples/src/main/java/org/springframework/batch/sample/domain/multiline/AggregateItemReader.java
这篇关于Spring Batch:一次处理多条记录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!