以下は、春のバッチの私の使用例です。
Web サービスから入力を読み取ります。Web サービスはすべてのレコードを返します。
レコードを処理します。
処理されたレコードを 1 つずつ書き込みます。
ステップ 2 と 3 については明確ですが、一度にすべてのレコードを読み取ることができるリーダーを実装する方法を理解できません。アイテム プロセッサ/ライターにレコードを 1 つずつ渡す方法は? リーダー/ライターの代わりにタスクレットを使用する必要がありますか?
以下は、春のバッチの私の使用例です。
Web サービスから入力を読み取ります。Web サービスはすべてのレコードを返します。
レコードを処理します。
処理されたレコードを 1 つずつ書き込みます。
ステップ 2 と 3 については明確ですが、一度にすべてのレコードを読み取ることができるリーダーを実装する方法を理解できません。アイテム プロセッサ/ライターにレコードを 1 つずつ渡す方法は? リーダー/ライターの代わりにタスクレットを使用する必要がありますか?
あなたの 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() を実装する必要があります。
よろしく