[Spring トランザクション入門 2 – トランザクション伝播のメカニズム]

Springトランザクションの伝播特性

トランザクションの伝播特性は何ですか?

トランザクションの伝播特性は、トランザクション メソッドが別のトランザクション メソッドによって呼び出されたときに、このトランザクションをどのように処理するかということです。

Spring は合計 7 つのトランザクション分離レベルを提供します。

物が必要ないもの、なくてもよいもの、用事がなければならないもの、の3つに分けられます。

物を欲しがらない:

1.PROPAGATION_NEVER: トランザクションが存在しない場合は実行されず、トランザクションが存在する場合は例外がスローされます。

2.PROPAGATION_NOT_SUPPORTED: そうでない場合、トランザクションは実行されません。そうである場合、トランザクションは直接一時停止され、その後トランザクションが実行されます。


必要不可欠な

3.PROPAGATION_SUPPORTED: トランザクションが存在する場合は現在のトランザクションに参加し、トランザクションが存在しない場合は実行されません。


何かやる事があるはずだ

4.PROPAGATION_REQUIRES_NEW: トランザクションの有無に関係なく、新しいトランザクションが作成されます。存在する場合は、元のトランザクションを一時停止し、独自のトランザクションを使用します。

5.PROPAGATION_NESTED: トランザクションの有無に関わらず新しいトランザクションが作成され、トランザクションがあれば現在のトランザクションに新しいものがネストされます。

6.PROPAGATION_REQUIRED: デフォルトのトランザクション タイプ。トランザクションがない場合は新しいトランザクションを作成し、存在する場合は現在のトランザクションを追加します。 (これはほとんどの場合に使用されます)

7.PROPAGATION_MANDATORY: トランザクションが存在しない場合はエラーが報告され、トランザクションが存在する場合は現在のトランザクションが追加されます。


注: これら 7 つのトランザクション分離レベルの中には、元のトランザクションを一時停止するタイプがあり、元のトランザクションを一時停止する分離レベルを使用すると問題が発生します。

メソッド A にユーザー テーブル内のデータを操作するトランザクションがあり、操作の完了後にメソッド B が呼び出されるとします。
メソッド B にもトランザクションがあります。メソッド B のロジックはメソッド A のロジックと同じです。メソッド B はユーザー テーブル内の同じデータを操作します。トランザクションの分離タイプは < であると仮定します。 /span>NOT_SUPPORTED
メソッド A がメソッド B を呼び出すと、メソッド B はメソッド A の処理を​​一時停止するためです。その結果、ユーザーテーブルはロックされます。したがって、メソッド B はユーザー テーブルに対して操作できないため、 デッドロックが発生します: デッドロック状況が発生します。

おすすめ

転載: blog.csdn.net/weixin_43249535/article/details/123733835