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