sur*_*rya 2 spring spring-batch
我正在使用 spring 批处理,并且通常使用我有 reader、processor 和 writer。
我有2个问题
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>
Run Code Online (Sandbox Code Playgroud)
处理器是
@Override
public User process(Object item) throws Exception {
// transform item to user
return user;
}
Run Code Online (Sandbox Code Playgroud)
我想要类似的东西
public List<User> process(List<Object> item) throws Exception {
// transform item to user
return user;
}
Run Code Online (Sandbox Code Playgroud)
我在这里找到了一些帖子,但他们说要在 writer 中获取列表。但我不喜欢在 writer 中处理任何内容,因为这会破坏作者和处理器的定义。是否有任何配置可以获取此进程方法中的列表。
谢谢
由于ItemProcessor接收您从 返回的任何内容ItemReader,因此您需要ItemReader将List. 这List确实是您正在处理的“项目”。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