Spring batch: 一次处理多条记录

Spring batch: processing multiple record at once

我正在使用 spring 批处理,并且像往常一样使用 reader、处理器和编写器。

我有 2 个问题

1> Reader 查询所有 200 条记录(table 中的总记录大小为 200 并且我给定了 pagesize=200 )因此它得到了所有 200 条记录,并且在处理器中我们想要所有这些记录的列表因为我们必须将每条记录与其他 199 条记录进行比较,以将它们分组到不同的层级中。 因此我在想,如果我们可以在处理步骤中获得该列表,我可以操纵它们。我应该如何处理。

2> 在处理阶段,我需要来自数据库的一些主数据,这取决于将处理所有输入记录。我正在考虑在处理 bean 中注入数据源并获取所有主 table 数据并处理所有记录。这是好的方法还是请提出其他建议。

<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;
}

我找到了一些 post here 但他们说要在 writer 中获取列表。但是我不喜欢在 writer 中处理任何东西,因为这会破坏 writer 和处理器的定义。这个process方法里面有获取list的配置吗

谢谢

由于 ItemProcessorItemReader 收到任何你 return 的东西,你需要你的 ItemReader 到 return ListList 实际上是您正在处理的 "item"。 Spring 批处理样本中有一个这样的例子。 AggregateItemReader 从委托 ItemReader 中读取所有项目,并 return 将它们作为一个列表。您可以在 Github 上查看它:https://github.com/spring-projects/spring-batch/blob/master/spring-batch-samples/src/main/java/org/springframework/batch/sample/domain/multiline/AggregateItemReader.java