[英]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.