我刚刚接触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>