2

私はSpring Batchが初めてです。Spring バッチが Web サービスでどのように機能するか、および Spring バッチに transaction_id = 125 などの Web サービスからの入力を読み取る方法を知りたい

明確にするために、Spring Batch で Web サービス (ID = 125) から入力を読み取り、入力をクエリしてから、そのレコードに対していくつかの計算を行い、最後にレコードを更新する必要があります。

4

1 に答える 1

3

あなたの質問に基づいて、あなたのコアジョブは次のようになります。

基本的に、サービスから 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>
于 2013-04-23T13:50:38.060 に答える