Spring批处理:一次处理多个记录

时间:2016-01-27 22:47:42

标签: spring spring-batch

我正在使用弹簧批,正如通常使用的那样,我有读者,处理器和作家。

我有两个问题

1> Reader查询所有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,但是他们说要在作家中获取列表。但是我不喜欢在编写器中处理任何内容,因为这会杀死编写者和处理器的定义。是否有任何配置来获取此流程方法中的列表。

谢谢

1 个答案:

答案 0 :(得分:4)

由于ItemProcessor会收到您从ItemReader返回的内容,因此您需要ItemReader返回ListList实际上是您正在处理的“项目”。 Spring Batch Samples中有一个例子。 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