0

次のチャンク処理ステップがあります。

  • 1) データベースにユーザーを作成します
  • 2) HTTP 呼び出しを介して、リモート システムでアカウントを開きます。

リモート システムのアカウントの料金を支払います。バッチの失敗時に、データベースでユーザーがロールバックされたために使用されないリモート アカウントを作成することは避けたいと考えています...

チャンク サイズが 100 の場合、50 番目の項目に対する 2) のリモート呼び出し中に例外が発生した場合、ビジネス ロジックはその例外をキャッチし、その特定の項目のリモート アカウントを閉じてから、チャンクのロールバックをトリガーする例外。

ただし、前に処理された 49 番目のアイテムについては、データベース内のユーザーはロールバックされますが、アカウントは閉鎖されません。

したがって、50 人のユーザーが DB でロールバックされますが、1 つのリモート アカウントのみが閉鎖されます。

50 のリモート アカウントを閉じることができるように手順を整理するにはどうすればよいですか (この手動ロールバックが失敗した場合、一貫性の問題ではありません: ベスト エフォート)。

4

1 に答える 1

0

不要なアカウントを閉鎖するための追加の手順はどうですか? 開かれたすべてのアカウントはOPENED_ACCOUNT、独自のトランザクションで追加のテーブル ( ) に格納されるため、Spring-Batch によってロールバックされることはありません。
クリーンアップ手順は、に保存されているデータに沿って動作しOPENED_ACCOUNT、エラー時に再起動したり、カスタムの再試行操作を管理したりできます。

于 2013-09-30T13:57:53.507 に答える