我正在使用 spring 批,并且通常使用我有读者,处理器和作家 .
我有两个问题
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 回答
由于
ItemProcessor
收到你从ItemReader
返回的任何内容,你需要ItemReader
来返回List
.List
真的是你正在处理的"item" . 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