2013-05-15 16 views
3

以下是我的用於spring批處理的用例。如何在ItemReader中讀取多個項目

  1. 從Web服務讀取輸入。 Web服務將返回所有記錄。

  2. 處理記錄。

  3. 逐個寫入處理的記錄。

我很清楚第2步和第3步,但無法弄清楚如何實現可以一次讀取所有記錄的閱讀器。如何將記錄逐一傳遞給物品處理器/作者? 我應該使用tasklet而不是讀寫器嗎?

回答

7

您的WebService將返回什麼?我猜對象的集合!

您的ItemReader需要在此集合上循環並逐個刪除項目,然後在處理完所有項目後返回null。

@Kik說的是剩下的是由Spring批處理,基於你的commit-interval。例如,如果您有一個10的commit0區間,您的閱讀器將讀取10個項目,並將這10個項目傳遞給ItemProc。然後再傳給作者。

希望它澄清

編輯:1)在Spring Batch的你有一個以上的選項,你所需要的。

Easy Option,創建一個實現ItemReader接口的自定義MyWsItemReader。

- 在此類中定義一個方法init(),它將調用您的webService並將結果放入MyWsItemReader的集合屬性中。

- 從接口實現read()方法。 (仔細閱讀文檔中的聯繫人 - 當您通過集合中的所有元素時,必須返回null)

- 然後,在步驟的周圍配置stepListener並實現beforeStep()方法以調用init()你的MyWsItemReader。您可以在監聽器中自動裝入閱讀器來完成此操作。

或者,您的MyWsItemReader也可以實現InitializingBean。那麼你就必須實現afterPropertySet(),您可以調用WS和結果存儲在MyWsItemReader

問候

+0

感謝您的回答的私有屬性。但我沒有得到它。春季批次我不太深。我的理解是讀者被多次調用並準備好對象列表並將其傳遞給處理器/寫入器。所以我的問題... – user1589089

+0

對不起,我不能寫出整個評論。感謝你的回答。但我沒有得到它。春季批次我不太深。我的理解是,讀者被多次調用並準備對象列表並將其傳遞給處理器/寫入器。所以我的問題 1.我應該在哪裏撥打網絡服務?即使我在讀者身上,如何將該列表傳遞給作者和處理者?任何樣本都會有很大幫助... 2.我應該使用tasklet來調用make web service調用嗎?如果是,我應該如何將我的物品傳遞給讀者和作者?如果我使用tasklet,我的工作將包括兩個步驟。 – user1589089

+0

見編輯。首先,讀者必須使用一組對象(從Jdbc調用,Xml,flatFile..etc映射)進行初始化。這是一次完成的。然後read()方法由塊配置中的commit-interval塊定義。每個塊都將被讀取,然後傳遞給ItemProcessor,ItemWriter通過Spring Batch自動完成....你沒有任何東西需要編碼,它全部在步驟配置中。 – Cygnusx1

相關問題