Spring トランザクション伝播メカニズムには、次の 7 つのタイプが含まれます。
1. Propagation.REQUIRED: デフォルトのトランザクション伝播レベル。つまり、トランザクションが現在存在する場合はトランザクションに参加します。
現在のトランザクションがない場合は、新しいトランザクションを作成します。
2. Propagation.SUPPORTS: 現在のトランザクションがある場合はトランザクションに参加し、現在のトランザクションがない場合は非トランザクションを使用します。
モードは引き続き動作します。
3. Propagation.MANDATORY: (必須: 必須) 現在トランザクションがある場合は、トランザクションに参加します。
以前のトランザクションがない場合は、例外がスローされます。
4. Propagation.REQUIRES_NEW: 新しいトランザクションを作成することを意味します。現在のトランザクションがある場合は、現在のトランザクションをハングします。
上昇。つまり、外部メソッドがトランザクションをオープンするかどうかに関係なく、Propagation.REQUIRES_NEW によって変更された内部メソッドが新たに独自のトランザクションをオープンし、オープンされたトランザクションは互いに独立しており、互いに干渉しません。
5. Propagation.NOT_SUPPORTED: 非トランザクション モードで実行します。現在のトランザクションがある場合は、現在のトランザクションを一時停止します。
6. Propagation.NEVER: 非トランザクション モードで実行し、現在のトランザクションがある場合は例外をスローします。
7. Propagation.NESTED: トランザクションが現在存在する場合は、現在のトランザクションのネストされたトランザクションとして実行するトランザクションを作成します。たとえば、
現在トランザクションがない場合、この値は PROPAGATION_REQUIRED と同等です。
上記 7 つの伝播動作は、現在のトランザクションをサポートするかどうかに応じて、次の 3 つのカテゴリに分類できます。
クラス 1: 現在のトランザクションをサポートする
必須 (必須)
現在のメソッドにトランザクションがない場合は新しいトランザクションを作成し、すでにトランザクションがある場合はこのトランザクションに参加します。
【類似の夫婦関係:家があれば一緒に暮らし、家がなければお金を稼いで家を買う。(困難に耐えるために喜んで同行しますが、家が必要です)]
サポート(持つことができる)
現在のトランザクションをサポートします。現在のトランザクションがない場合は、非トランザクション方式で実行されます。
【同棲する家があれば、家がなければ家を借りてもいい(家があれば家がなくても大丈夫)】
必須(必須)
現在のトランザクションを使用するか、現在のトランザクションがない場合は例外をスローします。
【家があれば同棲、家がなければ別れる(一緒に苦労しないで、家がなければ別れる)】
クラス 2: 現在のトランザクションをサポートしません
REQUIRES_NEW
新しいトランザクション実行を作成します。現在のトランザクションがある場合は、現在のトランザクションを一時停止します。
[あなたの家はいらない、家を買うために一緒にお金を稼がなければなりません。(今の家に住むことはできません、新しい家を買わなければなりません)]
サポートされていません
非トランザクション的な方法で操作を実行し、現在のトランザクションがある場合は現在のトランザクションを一時停止します。
[あなたの家はいらない、私たちは一緒に家を借りなければなりません(あなたの家に住んでいないなら、私たちは家を借りなければなりません)]
一度もない
非トランザクション的に実行され、トランザクションが現在存在する場合は例外をスローします。
[You should Rental a house together, and Break up if you want a house (一緒に家を借りなければなりません、家があるなら別れてください—私はあなたの家が好きではありません、そして私は住宅ローンを返済するためにあなたに同行しなければなりません) 】
クラス 3: ネストされたトランザクション
入れ子になった
トランザクションが現在存在する場合、ネストされたトランザクション内で実行されます。現在のトランザクションがない場合は、PROPAGATION_REQUIRED と同様の操作を実行します。
「家があるなら、家を拠点にちょっとしたビジネスをしましょう。儲かれば発展し続ければ良いです。損しても家だけは残しておいて下さい。」家がなくてもいいから一緒にお金を稼いで家を買いましょう(リスクなく起業して資金を貯めて賢明な夫婦になりましょう)】
[注:ここでの「家」とは事業所のことです]
ネストされたトランザクション (NESTED) と結合されたトランザクション (REQUIRED) の違い:
トランザクション全体が正常に実行された場合、2 つの結果は同じになります。
トランザクションが実行中に失敗した場合、トランザクションへの参加後にトランザクション全体がロールバックされますが、ネストされたトランザクションは影響を与えることなく部分的にロールバックされます。
前のメソッドの実行結果をエコーします。