我正在使用弹簧批,正如通常使用的那样,我有读者,处理器和作家。
我有两个问题
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,但是他们说要在作家中获取列表。但是我不喜欢在编写器中处理任何内容,因为这会杀死编写者和处理器的定义。是否有任何配置来获取此流程方法中的列表。
谢谢
答案 0 :(得分:4)
由于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