PROPAGATION_REQUIRES_NEW
とPROPAGATION_NESTED
伝播ポリシーの動作の違いを理解できません。どちらの場合も、現在のプロセスはロールバックされますが、トランザクション全体ではないように思われます。どんな手掛かり?
PROPAGATION_REQUIRES_NEW
とPROPAGATION_NESTED
伝播ポリシーの動作の違いを理解できません。どちらの場合も、現在のプロセスはロールバックされますが、トランザクション全体ではないように思われます。どんな手掛かり?
回答:
このリンクを参照してください:PROPAGATION_NESTEDとPROPAGATION_REQUIRES_NEW?JuergenHoellerはそれを非常によく説明しています。-春のソースフォーラムは、2019年2月28日SICE完全にオフラインになっているが、あなたは以下の引用で、物品の関連部分を読むことができます
PROPAGATION_REQUIRES_NEWは、指定されたスコープに対して、新しい独立した「内部」トランザクションを開始します。このトランザクションは、外部トランザクションから完全に独立してコミットまたはロールバックされ、独自の分離スコープ、独自のロックセットなどがあります。外部トランザクションは、内部トランザクションの開始時に一時停止され、内部トランザクションが終了すると再開されます。完了しました。..。
一方、PROPAGATION_NESTEDは、既存のトランザクションの真のサブトランザクションである「ネストされた」トランザクションを開始します。ネストされたトランザクションの開始時にセーブポイントが取得されます。ネストされたトランザクションが失敗した場合、そのセーブポイントにロールバックします。ネストされたトランザクションは外部トランザクションの一部であるため、外部トランザクションの最後にのみコミットされます。..。
PROPAGATION_REQUIRES_NEW:影響を受けるトランザクションスコープごとに完全に独立したトランザクションを使用します。その場合、基礎となる物理トランザクションは異なり、したがって、外部トランザクションは内部トランザクションのロールバックステータスの影響を受けずに、独立してコミットまたはロールバックできます。
PROPAGATION_NESTED:ロールバックできる複数のセーブポイントを持つ単一の物理トランザクションを使用します。このような部分的なロールバックにより、内部トランザクションスコープはそのスコープのロールバックをトリガーでき、一部の操作がロールバックされた場合でも、外部トランザクションは物理トランザクションを続行できます。この設定は通常、JDBCセーブポイントにマップされるため、JDBCリソーストランザクションでのみ機能します。
Springのドキュメントを確認してください
PROPAGATION_REQUIRES_NEW
:外部トランザクションは、内部トランザクションの開始時に一時停止され、内部トランザクションが完了すると再開されます。各内部トランザクションは、完了時にコミット/ロールバックされます。PROPAGATION_NESTED
:ネストされたトランザクションは外部トランザクションの一部であるため、外部トランザクションの最後にのみコミットされます。
違いを見つけてください
1.) Use of NESTED Transaction
現在のトランザクションが存在する場合はネストされたトランザクション内で実行し、それ以外の場合はPROPAGATION_REQUIREDのように動作します。ネストされたトランザクションはSpringによってサポートされています
2.)必須トランザクションの使用現在のトランザクションをサポートし、存在しない場合は新しいトランザクションを作成します。。これは、引き出し、預金、トランザクションの更新などの銀行ドメインを意味します
3.)REQUIRES_NEWトランザクションの使用新しいトランザクションを作成し、現在のトランザクションが存在する場合は一時停止します。