首页 > 解决方案 > 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 的示例,但处理器通常只是将当前行转换为其他内容。有没有办法让多行的一些内存来创建最终对象?

标签: spring-batchstateful

解决方案


如果无法在数据库端使用聚合查询来做到这一点,则可以使用驱动查询模式。这种模式的想法是,项目阅读器只读取人员的详细信息(姓名、姓氏),项目处理器使用其他详细信息(在您的情况下为薪水)丰富当前项目。这在文档的基于驱动查询的 ItemReaders部分中进行了描述。

请注意,此模式适用于小型数据集,但不适用于大型数据集,因为它需要对每个项目进行额外查询。


推荐阅读