89

PROPAGATION_REQUIRES_NEWとのPROPAGATION_NESTED伝播ポリシーの動作の違いがわかりません。どちらの場合も、現在のプロセスはロールバックされていますが、トランザクション全体ではないようです。どんな手掛かり?

4

3 に答える 3

127

このリンクを参照してください:PROPAGATION_NESTEDとPROPAGATION_REQUIRES_NEW?ユルゲン・ヘラーはそれを非常によく説明しています。--Spring Source Forumは2019年2月28日、完全にオフラインになっていますが、以下の引用で記事の関連部分を読むことができます

PROPAGATION_REQUIRES_NEWは、指定されたスコープに対して、新しい独立した「内部」トランザクションを開始します。このトランザクションは、外部トランザクションから完全に独立してコミットまたはロールバックされ、独自の分離スコープ、独自のロックセットなどがあります。外部トランザクションは、内部トランザクションの開始時に一時停止され、内部トランザクションが終了すると再開されます。完了しました。..。

一方、PROPAGATION_NESTEDは、既存のサブトランザクションの真のサブトランザクションである「ネストされた」トランザクションを開始します。ネストされたトランザクションの開始時にセーブポイントが取得されます。ネストされたトランザクションが失敗した場合、そのセーブポイントにロールバックします。ネストされたトランザクションは外部トランザクションの一部であるため、外部トランザクションの最後にのみコミットされます。..。

于 2012-09-12T15:11:02.160 に答える
16

PROPAGATION_REQUIRES_NEW : 影響を受けるトランザクション スコープごとに完全に独立したトランザクションを使用します。その場合、基になる物理トランザクションが異なるため、独立してコミットまたはロールバックでき、外部トランザクションは内部トランザクションのロールバック ステータスの影響を受けません。

PROPAGATION_NESTED : ロールバックできる複数のセーブポイントを持つ単一の物理トランザクションを使用します。このような部分的なロールバックにより、内側のトランザクション スコープがそのスコープのロールバックをトリガーできるようになり、一部の操作がロールバックされたにもかかわらず、外側のトランザクションは物理的なトランザクションを続行できます。この設定は通常、JDBC セーブポイントにマップされるため、JDBC リソース トランザクションでのみ機能します。

春のドキュメントを確認してください

于 2012-09-12T14:55:22.417 に答える
-6

違いを見つけてください

1.) Use of NESTED Transaction

現在のトランザクションが存在する場合はネストされたトランザクション内で実行し、そうでない場合は PROPAGATION_REQUIRED のように動作します。ネストされたトランザクションはSpringによってサポートされています

2.) REQUIRED トランザクションの使用 現在のトランザクションをサポートし、存在しない場合は新しいトランザクションを作成します。. これは、トランザクションの引き出し、入金、更新などの銀行ドメインを意味します

3.) REQUIRES_NEW トランザクションの使用 新しいトランザクションを作成し、現在のトランザクションが存在する場合は一時停止します。

于 2015-12-04T05:45:42.417 に答える