3

以下は、春のバッチの私の使用例です。

  1. Web サービスから入力を読み取ります。Web サービスはすべてのレコードを返します。

  2. レコードを処理します。

  3. 処理されたレコードを 1 つずつ書き込みます。

ステップ 2 と 3 については明確ですが、一度にすべてのレコードを読み取ることができるリーダーを実装する方法を理解できません。アイテム プロセッサ/ライターにレコードを 1 つずつ渡す方法は? リーダー/ライターの代わりにタスクレットを使用する必要がありますか?

4

1 に答える 1

8

あなたの WebService は何を返しますか? 私が推測するオブジェクトのコレクション!

ItemReader は、このコレクションをループして項目を 1 つずつ削除し、すべて処理されたら null を返す必要があります。

@Kik が言っていたことは、残りはコミット間隔に基づいて Spring バッチによって処理されるということです。たとえば、commit0interval が 10 の場合、リーダーは 10 個のアイテムを読み取り、それらの 10 個のアイテムを ItemProc に渡します。その後、ライターに再度渡します。

それが明確になることを願っています

編集: 1) Spring Batch では、必要なことを行うためのオプションが複数あります。

簡単なオプション、ItemReader インターフェイスを実装するカスタム MyWsItemReader を作成します。

- このクラスでメソッド init() を定義して、webService を呼び出し、結果を MyWsItemReader のコレクション属性に入れます。

-インターフェイスからメソッド read() を実装します。(ドキュメントの連絡先を注意深く読んでください - コレクションのすべての要素を渡したときに null を返す必要があります)

-次に、ステップの周囲に stepListener を構成し、beforeStep() メソッドを実装して MyWsItemReader の init() を呼び出します。これを実現するために、リスナーでリーダーを自動配線できます。

または、MyWsItemReader で InitializingBean を実装することもできます。次に、 ws を呼び出して結果を MyWsItemReader のプライベート属性に格納できる afterPropertySet() を実装する必要があります。

よろしく

于 2013-05-15T18:47:40.230 に答える