我剛剛接觸Spring Batch。我想知道Spring批處理如何與Web服務一起工作,以及如何獲取spring批處理以從Web服務讀取輸入,如transaction_id = 125Spring Batch如何使用Web服務以及如何讀取Web服務輸入?
爲了清楚說明我希望spring批處理從Web服務讀取輸入(ID = 125),查詢輸入,然後對該記錄進行一些計算並最終更新記錄
我剛剛接觸Spring Batch。我想知道Spring批處理如何與Web服務一起工作,以及如何獲取spring批處理以從Web服務讀取輸入,如transaction_id = 125Spring Batch如何使用Web服務以及如何讀取Web服務輸入?
爲了清楚說明我希望spring批處理從Web服務讀取輸入(ID = 125),查詢輸入,然後對該記錄進行一些計算並最終更新記錄
根據您的問題,您的核心工作看起來像這樣;
基本上,你會從一個服務讀取單個記錄(webServiceReader - 通過ID檢索),該過程中它(webServiceProcessor),然後,最後,堅持它的地方(databaseWriter)。
如果您已經安裝了現有的Web服務客戶端,您可以在org.springframework.batch.item.adapter.ItemReaderAdapter
中重新使用該組件。這將允許您保存一些編碼並找回您的對象。然後您可以專注於處理器,再次使用org.springframework.batch.item.adapter.ItemProcessorAdapter
來重新啓用現有的非批處理代碼。
最後,對於持久性,如果您正在尋找更新數據庫,請看org.springframework.batch.item.database.JdbcBatchItemWriter
。
這個實現的唯一'技巧'是如何指定從web服務請求哪個id。爲此,您可能需要查看隊列/堆棧,您可以在每個連續呼叫中爲其提供一個ID。
這可能是這個樣子
<batch:job id="webServiceJob">
<batch:step id="webServiceJob.step1">
<batch:tasklet>
<batch:chunk reader="webServiceReader" processor="webServiceProcessor" writer="databaseWriter" commit-interval="10"/>
</batch:tasklet>
</batch:step>
</batch:job>
<bean id="webServiceReader" class="org.springframework.batch.item.adapter.ItemWriterAdapter">
<property name="targetObject" ref="myWebService"/>
<property name="targetMethod" value="getById"/>
<property name="arguments" value="#{@idQueue.poll()}"/>
</bean>
<bean id="idQueue" class="java.util.concurrent.LinkedBlockingQueue">
<constructor-arg>
<list>
<value>1</value>
<value>2</value>
<value>3</value>
</list>
</constructor-arg>
</bean>