我很苦惱如何設計春季批處理作業。總體目標是檢索約2000萬條記錄並將它們保存到sql數據庫。春季批處理作業設計 - 多讀者
我是這樣做的兩部分。首先,我檢索我想要檢索的記錄的2000萬個ID並將其保存到文件(或DB)中。這是一個相對較快的操作。其次,我循環訪問我的Ids文件,分批處理2,000個,並從外部服務中檢索相關記錄。然後我再重複一遍,每次記錄2000個Ids,直到我找回所有記錄。對於我檢索的每批2,000條記錄,我將它們保存到數據庫中。
有些人可能會問爲什麼我這樣做是分兩步進行的。我最終計劃使第二步平行運行,以便可以並行檢索2,000個記錄的批次,並希望大大加快下載速度。有了Ids,我可以將這項工作分成多個批次。現在,我們不必擔心並行性,只關注如何設計更簡單的順序工作。
想象一下,我已經解決了本地保存所有Ids的第一個問題。他們在一個文件中,每行一個Id。我如何設計第二部分的步驟?
下面是我在想什麼......
使用平面文件閱讀器讀取的ID 2000。我需要一個聚合器,因爲我只想對每個2K Ids批次的外部服務執行一個查詢。這是我掙扎的地方。我是否嵌套一系列讀者?或者我可以在處理器或作家中「讀」嗎?
本質上,我的問題是我想從文件讀取行,聚合這些行,然後立即做另一個「讀取」來檢索相應的記錄。我幾乎想要將讀者聯繫在一起。
最後,一旦我從外部服務中檢索到記錄,我將擁有一個記錄列表。這意味着當他們到達作家時,我會列出一個列表。我想要一個對象列表,以便我可以使用JdbcItemWriter開箱即用。
想法?希望這是有道理的。
安德魯
我剛剛在文檔中找到了這個例子,似乎表明我應該在處理器中檢索完整對象(使用來自閱讀器的ID)。也許我會從字面上理解這些接口名稱。處理器中的「讀取」感覺很奇怪。 HTTP://docs.spring。IO /彈簧分批/中繼/參考/ HTML/patterns.html#drivingQueryBasedItemReaders – anschoewe 2014-09-20 20:49:44