Spring のドキュメント (46 ページ、セクション: 5.1.7) には次のように書かれています。
デフォルトでは、再試行またはスキップに関係なく、ItemWriter から例外がスローされると、Step によって制御されるトランザクションがロールバックされます。スキップが上記のように構成されている場合、ItemReader からスローされた例外はロールバックを引き起こしません。
私のコミット間隔は 10 に設定されています。したがって、上記の段落についての私の理解では、10 個のチャンクから 7 番目のレコードを読み取る際にエラーが発生した場合、アイテムはスキップされ、正しい 9 個のレコードが itemReader によって先に送信されます。
ただし、書き込み中に 7 番目のレコードがエラーになった場合、10 レコードのいずれも書き込まれず、ロールバックが発生します。
ただし、skipPolicy でスローされたエラーを含めると、itemWriter は残りの 9 つのレコードをデータベースに書き込み、エラーが発生したレコードをスキップします。これは、上で述べたことと矛盾します。
「アイテム書き込み中のスキップ」の概念を説明してください。
また、単一のエラーがスローされても、次のようになります。
SkipCount を -1 として 2 回、次に 0 として 1 回、そしてまた -1 として shouldSkip(Object, Throwable) メソッドで 1 回。-- この動作が得られません。
また、ロールバック カウントは 2 です。これはどういう意味ですか? なぜ 2 なのですか?
@michaelいくつかのシナリオを使用して動作を説明できますか!!
たとえば、「ファイルから 20 レコードを読み取り、いくつかの処理の後にデータベースに書き込みます。いくつかの例外に対してスキップ ポリシーを設定しています。読み取り、処理、書き込み中に例外が発生した場合はどうなりますか?チャンクはどのようになりますか?コミット、デフォルトの再試行の仕組み、カウントの更新方法など...."
私はまだ行動に混乱しているので、それは本当に私にとって大きな助けになるでしょう..