2013-04-23 123 views
1

我剛剛接觸Spring Batch。我想知道Spring批處理如何與Web服務一起工作,以及如何獲取spring批處理以從Web服務讀取輸入,如transaction_id = 125Spring Batch如何使用Web服務以及如何讀取Web服務輸入?

爲了清楚說明我希望spring批處理從Web服務讀取輸入(ID = 125),查詢輸入,然後對該記錄進行一些計算並最終更新記錄

回答

2

根據您的問題,您的核心工作看起來像這樣;

基本上,你會從一個服務讀取單個記錄(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>