2013-04-23 82 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>