по вашему вопросу ваша основная работа будет выглядеть примерно так:
по существу, вы собираетесь прочитать из службы одной записи (webServiceReader - извлекаться по идентификатору), процесс его (webServiceProcessor), а затем, наконец, сохраняются его где-то (databaseWriter).
Если у вас уже установлен уже существующий клиент веб-службы, вы можете повторно использовать этот компонент внутри org.springframework.batch.item.adapter.ItemReaderAdapter
. Это позволит вам сохранить некоторое кодирование и вернуть свой объект. вы можете затем сосредоточиться на процессоре, опять же, посмотрите на использование org.springframework.batch.item.adapter.ItemProcessorAdapter
, чтобы включить повторное использование существующего не-пакетного кода.
Наконец, для сохранения, если вы хотите обновить базу данных, посмотрите на org.springframework.batch.item.database.JdbcBatchItemWriter
.
Единственный «трюк» для этой реализации - это указать, какой идентификатор запрашивать у веб-службы. для этого вы можете посмотреть на очередь/стек, где вы можете указать poll()
идентификатор для каждого последующего вызова.
это может выглядеть примерно так
<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>