2015-04-06 24 views
1

我正在使用spring批處理模塊讀取具有多行記錄的複雜文件。文件中的前三行將始終包含一個具有少量公共字段的標題。 這些常用字段將用於處理文件中後續記錄。作業可以重新啓動。 假設輸入文件有10條記錄(請注意記錄數可能與行數不同,因爲記錄可以跨越多行)。 假設作業第一次運行,開始從第1行讀取文件,並處理第5條記錄,並在處理第6條記錄時失敗。 在第一次運行期間,由於作業還解析了標題部分(文件中的前3行),因此應用程序可以成功處理前5條記錄。 現在當重新啓動失敗的作業時,它將從第6條記錄開始,因此這次不會讀取標題部分。由於應用程序需要包含在標題記錄中的某些值 ,因此作業失敗。我想知道可能的建議,以便重新啓動的作業始終讀取標題部分,然後從其停止的位置(上述情況中的第6條記錄)開始 。始終讀取彈簧批作業重新啓動的前n行

在此先感謝。

回答

3

我猜,有問題的文件在運行之間不會改變?那麼就沒有必要重新閱讀它,我的解決方案基於這樣的假設

如果你使用一個步驟中,您可以

它應該工作的重新啓動爲好,因爲Spring Batch的讀取/從第一次運行保存的值,並會提供完整的執行上下文的後續運行

+0

謝謝邁克爾 – ivish

3

可以使2步的工作,其中:

第一步讀取第3行的頭信息,並把需要工作的來龍去脈(如果作業失敗,因此將其保存在數據庫以備將來執行)。如果此步驟失敗,則會再次讀取標題信息,如果它通過,您確定它始終在作業上下文中具有標題信息。

第二步可以使用相同的文件輸入,但這次你可以告訴它跳過前3行並按原樣讀取其餘的文件。通過這種方式,您將在該步驟中獲得可重啓性,並且每次作業失敗時都會恢復其離開的位置。

相關問題