2014-01-31 38 views
1

我新的Spring Batch的和我相當與它失去了...Spring Batch的平面文件閱讀器

我有4個種類的輸入文件來處理,這遵循相同的模式:

頭 記錄 頁腳

當然,「記錄」是我的4種不同類型文件之間的變化。

當讀取文件時,標題中的一個字段指定哪種記錄當前組成處理的平面文件。 另外,我的頭文件中有3個字段,我必須在將每個(文件)記錄插入數據庫之前添加到這些字段中。

而且我認爲考慮它更困難(對我來說),我還需要計算進程文件的MD5校驗和以將此數據添加到我的數據庫的所有記錄中。

因此,要說明我試着解釋:

文件1(類型=合同)

1CONTRACTHDATA1HDATA2HDATA3 
2CONTRACTDATA1CONTRACTDATA2CONTRACTDATA3 
2CONTRACTDATA1CONTRACTDATA2CONTRACTDATA3 
2CONTRACTDATA1CONTRACTDATA2CONTRACTDATA3 
3FOOTERDATA 

文件2(類型=三級)

1THIRDHDATA1HDATA2HDATA3 
2THIRDDATA1THIRDDATA2 
2THIRDDATA1THIRDDATA2 
2THIRDDATA1THIRDDATA2 
3FOOTERDATA 

而且我想要什麼插入是:

INSERT INTO CONTRACT (field1, field2, field3, field4, field5, field6, field7) VALUES (HDATA1, HDATA2, HDATA3, CONTRACTDATA1, CONTRACTDATA2, CONTRACTDATA3, MD5)對於我的第一個文件的每個「2 *」行

INSERT INTO THIRD (field1, field2, field3, field4, field5, field6) VALUES (HDATA1, HDATA2, HDATA3, THIRDDATA1, THIRDDATA2, MD5)對於我的第二個文件的每個「2 *」行。

謝謝任何​​人誰可以幫忙!

回答

1

對於你的工作,你需要兩個步驟。

第1步,它需要計算文件的MD5校驗和。爲此,您應該使用tasklet step

第2步,是您正常的彈簧批次chunk oriented processing step和簡單的flat file readerfixed length tokenizer。由於您是Spring批處理新手,讓我們保持簡單,只需在ItemProcessor中執行if語句來檢測「1」行。當你這樣做時,保存標題信息的副本。當你檢測到「2」行時,用你的標題信息組成一個obj,然後傳遞它。當您檢測到「3」時,返回null以跳過該條目。

作家應該是非常簡單的。實現ItemWriter接口並進行jdbc調用。

祝你好運。

+0

謝謝傑克遜。我想我必須將MD5放入作業上下文中,才能從下一個面向塊的處理步驟中獲取它,並將頭信息放入chunkContext中,對嗎? – Cheloute

+0

md5在jobexecution context中是。 header info ... stepExecutionContext會工作...或者ItemProcessor中的本地實例變量也可以工作。 –

+0

非常感謝傑克遜,它的作品:) – Cheloute