0

ご存知のように、Spring バッチはバージョン 2.0 以降、チャンク指向の処理を使用しています。

アイテム ライターで例外が発生した場合、データ ソース トランザクション マネージャーはチャンク全体または関連アイテムのみをロールバックするということですか?

実際に試してみたところ、フレームワークがチャンク全体をロールバックすることがわかりました。最後のアイテムで例外がスローされたときに、正常に処理された 499 個のアイテムが 500 個のアイテムで構成されるチャンクにロールバックされることを望まないため、これは必要ありません。

私が見つけた唯一の解決策は、以下の属性をタスクレットに追加することです。ただし、これが正しいことかどうかはわかりません。

<batch:transaction-attributes propagation="NOT_SUPPORTED"/> 

もう 1 つの意見は、単にチャンク サイズを 1 に減らすことでしたが、これもあまり意味がありません。

おそらく、Spring Batch は私の問題ドメインには適していません。もしそうなら、そのようなフレームワーク固有の動作にもう苦労しないように教えてください。

どんな提案でも大歓迎です。

4

3 に答える 3

0

解決策は、ライターでの例外の伝播を停止してキャッチすることです。これにより、例外をキャッチしてカスタム処理を行うときに、バッチがロールバックするのを防ぐことができます。

于 2014-01-30T15:34:10.483 に答える
0

あなたの権利:チャンクロット全体がロールバックされます。

私は同じ問題に直面し、次のことを行いました:

  • データベースに従ってバッチサイズを調整します(更新を保存するためにバッチステートメントを使用していました)。25 は私たちにとって良い値でした: 1 よりはまし (バッチのメリット)、多すぎません (巨大なトランザクション)。
  • このステップを限られた回数再起動: このタスクを最大 3 回再実行できるようにしました。

バッチ処理中に修正が発生する可能性があるため、これはうまく機能していました (修正は GUI によって行われました)。

プロセスの最後に、失敗としてマークされ、3 回再試行されたすべてのデータは、バッチ レポートで失敗として明確にマークされました。その後、人間による修正または特別なプロセスが必要です。

于 2011-04-11T08:37:28.670 に答える