[英]How to access read raw data in a spring batch job (xml or csv)
[英]How to read multiple CSV files in Spring Batch to merge the data for processing?
我是Spring Batch的新手,正在尝试获取有关以下要求的指南。
我必须从不同的系统中获取数据,应用一些业务逻辑,并将结果保存在DB中。
下面是一个例子。
我需要从3个CSV文件中读取数据。 第一个文件– person.csv –包含名称和ID。第二个文件– address.csv –包含每个人的地址信息。 一个人可以有零个或多个地址。
第三个文件– Employment.csv –包含每个人的就业信息。 一个人可以有零个或多个雇主。
这是一些示例。
“ personID”,“ personName”
1,乔伊
2,钱德勒
3,罗斯
4,莫妮卡
“ personID”,“ addressType”,“ state”
纽约市1号住宅
1,邮寄,数控
纽约市2号住宅
纽约市4号住宅
4,邮寄,DC
“ personID”,“ employerName”
1,emp1
2,emp2
2,emp3
3,emp4
注意:每个文件均按人员ID排序。
要应用业务逻辑,我需要合并每个人的数据,即,我需要合并一个人的人,地址,就业数据以应用逻辑。 您能为此建议任何方法吗?
这听起来像一个4 步 ,工作。 您必须确定步骤1到3的中间结果应该在哪里。
如果所有CSV文件中的数据都可以存储在内存中,则步骤1至3的中间结果可能只是一个Map
,并以personID
作为键。 如果不是,则步骤1至3的中间结果可能应该写入数据库的临时表中。
假设所有数据都可以容纳在内存中,请创建一个可以注入到步骤1到步骤3的ItemWriters中的bean,例如:
// in a config class...
// assuming PersonID is of type Long
// Assuming Person class has appropriate attributes
Map<Long, Person> people = new HashMap<>();
第1步:
people
地图(或中间表)。 第2步:
people
映射(或中间表)添加到相关的人员。 待办事项:如果不存在某人的地址,该怎么办? 第三步:
people
图(或中间表)向相关人员添加就业。 待办事项:如果某人不存在工作,该怎么办? 由于第1到第3步中ItemProcessor不需要执行任何操作,因此最好使用Tasklet。
同样,步骤1至3可以并行进行。 这可能会提高性能,但是会增加复杂性以确保people
正确填充。
第四步:
people
(或从中间表复合对象)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.