1

私の特定のシナリオでは、ファイルから読み取った巨大なエンティティをデータベースに永続化する必要がありますが、コミット間隔はvalue = 1. また、使用されているデリゲート プロセッサがべき等であるかどうかもよくわかりませんCompositeItemProcessor。だから私の質問は、再処理の無駄な時間を防ぎ、データベースへの多くの未使用のクエリを避ける方法があるかどうかです。また、SkipListener を使用して、特定のテーブルへの読み取り/処理/書き込みのエラーをログに記録し、そのような構成 (再処理なし) がそれに準拠していないと思われます。

春のバッチ 2.1.9 を使用しています。

前もって感謝します。

____________________________更新 2016 年 7 月 5 日__________________________________________

数日間の調査の後、一部のユーザーとスプリング開発者の間で概念的な議論があることに気付きました。

この2014年の投稿の回答に対するコメントで@MichaelMinellaが述べたように、書き込みフェーズ中にスローされたスキップされた例外で設計されたように、この動作が機能することがわかりました。

ItemWriter#writeメソッドはアイテムのリストを受け取ります。一度に 1 つずつ確認しないと、リスト内のどれがライターで例外をスローしたかを判断する方法がありません。

そのため、リスト全体をスキャンせずにフレームワークが失敗した項目を発見する方法はまだありません (チャンク サイズが1であっても)。これを行うためのフレームワークの内部動作は を使用し、FaultTolerantChunkProcessorRetryTemplateこの2013 の投稿で説明されています。この問題に関する詳細な議論は、この春のバッチ フォーラム 2012 の投稿で見つけることができます。

4

1 に答える 1