spring-batch - Spring批处理有状态处理器
问题描述
我正在尝试使用 Spring Batch 从数据库中读取并写入控制台。我已经使用 JdbcCursorItemReader 类实现了一个数据库读取器。问题是数据库中的对象分布在几个不同的行中。例如,如果我想创建 Person 对象,我将拥有如下内容:
名字姓氏周薪
卡洛斯帕尔马 1 150
卡洛斯帕尔马 2 120
现在我想创建一个如下所示的对象:
public class Person{
String firstName;
String lastName;
List<Salary> payment;
}
Salary 对象如下所示:
public class Salary{
String week;
Integer salary;
}
我已经看到了 Spring Batch 的示例,但处理器通常只是将当前行转换为其他内容。有没有办法让多行的一些内存来创建最终对象?
解决方案
如果无法在数据库端使用聚合查询来做到这一点,则可以使用驱动查询模式。这种模式的想法是,项目阅读器只读取人员的详细信息(姓名、姓氏),项目处理器使用其他详细信息(在您的情况下为薪水)丰富当前项目。这在文档的基于驱动查询的 ItemReaders部分中进行了描述。
请注意,此模式适用于小型数据集,但不适用于大型数据集,因为它需要对每个项目进行额外查询。