2013-04-23 1 views
1

i`m новый для весенней партии. Я хочу знать, как работает Spring с веб-сервисами, и как я могу получить весеннюю партию для чтения ввода из веб-сервиса, такого как transaction_id = 125Как работает Spring Batch с веб-сервисами и как я могу прочитать ввод веб-сервиса?

, чтобы это стало ясно, я хочу, чтобы весенняя партия читала ввод с веб-службы (ID = 125), запросите ввод, затем выполните некоторые вычисления на этой записи и окончательно обновите записи

ответ

2

по вашему вопросу ваша основная работа будет выглядеть примерно так:

по существу, вы собираетесь прочитать из службы одной записи (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>