刘耀文

刘耀文

java开发者
github

Springのトランザクションの伝播動作

事务伝播#

事务伝播のいくつかのケース#

番号事务の伝播メカニズム説明備考
1required現在のトランザクションが存在する場合は、そのトランザクションに参加します。 現在のトランザクションが存在しない場合は、新しいトランザクションを作成します。 これが最も一般的な設定です。トランザクションを作成します。
2requires_newトランザクションの有無に関係なく、新しい独自のトランザクションを作成します。古いトランザクションは一時停止し、新しいトランザクションが実行されてコミットされた後、古いトランザクションが再開されて最後にコミットされます。1. 新しいトランザクションを常に作成します。 2. 新しいトランザクションを作成する前に、古いトランザクションを一時停止します。 3. 最初に実行されたメソッドはトランザクションを後でコミットし、後に実行されたメソッドはトランザクションを先にコミットします。 4. 古いトランザクションのロールバックは、新しいトランザクションのコミットに影響しません。
3nested現在のトランザクションが存在する場合、ネストされたトランザクションは外部のトランザクションと同じトランザクションを使用しますが、内部のネストでは新しいセーブポイント( savepoint )が作成され、次の 2 つの場合に実行されます: (1)ネストされた内部でロールバックが発生した場合、外部のトランザクションの正常なコミットに影響しません。 (2)外部のトランザクションでロールバックが発生した場合、ネストされた内部のトランザクションもロールバックされます。 (3)例外が発生しない場合、ネストされた内部のトランザクションと外部のトランザクションは一緒にコミットされます。現在のトランザクションが存在しない場合は、requiredと同様の操作が実行されます。皮は残っているが、毛は焼かれている。 皮がなくなると、毛はどこにつくのか。
4supports現在のトランザクションをサポートします。 現在のトランザクションが存在する場合は、そのトランザクションに参加し、 現在のトランザクションが存在しない場合は、非トランザクションで実行します。supports はトランザクションを作成しません。
5not_supportedトランザクションをサポートしません。 現在のトランザクションが存在する場合は、現在のトランザクションを一時停止します。 現在のトランザクションが存在しない場合は、非トランザクションで実行します。
6mandatoryトランザクションを強制的に使用します。 現在の トランザクションが既に存在する場合は、そのトランザクションに参加し、 現在のトランザクションが存在しない場合は、例外をスローします。1. mandatory はトランザクションを作成しません。 2. mandatory の実行条件は既にトランザクションが存在することです。
7neverトランザクションを禁止します。 現在のトランザクションが存在する場合は、例外をスローします。 現在のトランザクションが存在しない場合は、非トランザクションで実行します。トランザクションがない状態で実行する必要があります。そうでない場合、エラーが発生します。

事务伝播のいくつかのケースの理解#

動作タイプ
あれば参加、なければ無視supports
外側があっても新しいトランザクションである必要があるrequires_new
外側があれば参加、なければ新しいトランザクションrequired
外側があれば参加、セーブポイントを追加、なければ新しいトランザクションnested
トランザクションは必要ない、外側があれば一時停止not_supported
トランザクションが必要(条件を満たさない場合は例外)mandatory
トランザクションが不要(条件を満たさない場合は例外)mandatory

スレッドバインディング(同期管理)#

この記事は Mix Space から同期更新され、xLog に掲載されています。
元のリンクは https://me.liuyaowen.club/posts/default/Spring です。


読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。