我是 Spring Batch 的新手。我想知道 Spring Batch 如何与 Web 服务一起工作,以及如何让 Spring Batch 从 Web 服务读取输入,例如 transaction_id = 125
为了清楚起见,我希望 Spring Batch 从 Web 服务(ID = 125)读取输入,查询输入然后对该记录进行一些计算并最终更新记录
我是 Spring Batch 的新手。我想知道 Spring Batch 如何与 Web 服务一起工作,以及如何让 Spring Batch 从 Web 服务读取输入,例如 transaction_id = 125
为了清楚起见,我希望 Spring Batch 从 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。为此,您可能想查看一个队列/堆栈,您可以在其中poll()
为每个连续调用提供一个 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>