私の仮定
私の理解では、Spring Batch の「チャンク指向の処理」は、1 つのトランザクションで複数のアイテムを効率的に処理するのに役立ちます。これには、外部システムからのインターフェースの効率的な使用が含まれます。外部通信にはオーバーヘッドが含まれるため、制限され、チャンク指向でもある必要があります。そのため、 のコミット レベルがありItemWriter
ます。だから私が得られないのは、なぜItemReader
まだ項目ごとに読まなければならないのですか? チャンクも読めないのはなぜですか?
問題の説明
私のステップでは、リーダーは Web サービスを呼び出す必要があります。そして、ライターはこの情報を別の Web サービスに送信します。そのため、必要なだけ呼び出しを行いたくないのです。
のインターフェースItemWriter
はチャンク指向です - ご存じのように:
public abstract void write(List<? extends T> paramList) throws Exception;
しかし、ItemReader
そうではありません:
public abstract T read() throws Exception;
回避策として、アイテムのリストを読み取り、それらを保存し、そのメソッドが呼び出されるChunkBufferingItemReader
たびにアイテムを 1 つずつ返すを実装しました。read()
しかし、現在、例外処理とジョブの再開に関しては、このアプローチは厄介になっています。フレームワークが私のためにしてくれるはずの、ここで仕事をしているような気がします。
質問
それで、私は何かを逃していますか?見落としていた Spring Batch の既存の機能はありますか?
別の投稿では、 の戻り値の型を に変更することが提案されItemReader
ましたList
。しかし、その後、ItemProcessor
単一の入力から複数の出力を発行する必要があります。これは正しいアプローチですか?
私はどんなベストプラクティスにも優雅です。前もって感謝します :-)