2

我是 Spring Batch 的新手。我想知道 Spring Batch 如何与 Web 服务一起工作,以及如何让 Spring Batch 从 Web 服务读取输入,例如 transaction_id = 125

为了清楚起见,我希望 Spring Batch 从 Web 服务(ID = 125)读取输入,查询输入然后对该记录进行一些计算并最终更新记录

4

1 回答 1

3

根据您的问题,您的核心工作看起来像这样;

本质上,您将从服务中读取单个记录(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>
于 2013-04-23T13:50:38.060 回答