私はSpring Batchが初めてです。Spring バッチが Web サービスでどのように機能するか、および Spring バッチに transaction_id = 125 などの Web サービスからの入力を読み取る方法を知りたい
明確にするために、Spring Batch で Web サービス (ID = 125) から入力を読み取り、入力をクエリしてから、そのレコードに対していくつかの計算を行い、最後にレコードを更新する必要があります。
私はSpring Batchが初めてです。Spring バッチが Web サービスでどのように機能するか、および Spring バッチに transaction_id = 125 などの Web サービスからの入力を読み取る方法を知りたい
明確にするために、Spring Batch で Web サービス (ID = 125) から入力を読み取り、入力をクエリしてから、そのレコードに対していくつかの計算を行い、最後にレコードを更新する必要があります。
あなたの質問に基づいて、あなたのコアジョブは次のようになります。
基本的に、サービスから 1 つのレコード (webServiceReader - id で取得) を読み取り、それを処理 (webServiceProcessor) し、最後にどこかに永続化します (databaseWriter)。
既存の Web サービス クライアントがすでにセットアップされている場合は、そのコンポーネントを .xml ファイル内で再利用できます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>