事务传播#
事务传播的几种情况#
序号 | 事务的传播机制 | 说明 | 备注 |
---|---|---|---|
1 | required | 現在トランザクションが存在する場合は、そのトランザクションに参加します。 現在トランザクションが存在しない場合は、新しいトランザクションを作成します。 これは最も一般的な設定です。 | 1 つのトランザクションのみを作成します。 |
2 | requires_new | トランザクションが存在するかどうかに関係なく、新しい独自のトランザクションを作成します。古いトランザクションは一時停止し、次に新しいトランザクションを作成し、新しいトランザクションが完了してコミットされた後、古いトランザクションを再開して最後にコミットします。 | 1、毎回新しいトランザクションを作成します。 2、新しいトランザクションを作成する前に、古いトランザクションは一時停止します。 3、先に実行されたメソッドがトランザクションをコミットし、後に実行されたメソッドが先にトランザクションをコミットします。 4、古いトランザクションのロールバックは、新しいトランザクションのコミットに影響を与えません。 |
3 | nested | 現在トランザクションが存在する場合、ネストされたトランザクションは外部トランザクションと同じトランザクションを使用しますが、異なる点はネスト内部で新しいセーブポイント(savepoint )を開くことです。実行には 2 つのケースがあります:(1)ネスト内部でロールバックが発生した場合、外部トランザクションの正常なコミットには影響しません。(2)外部トランザクションでロールバックが発生した場合、ネスト内のトランザクションはロールバックされます。(3)例外が発生しなかった場合、ネスト内のトランザクションと外部トランザクションは一緒に、全体としてコミットされます。現在トランザクションが存在しない場合は、required と同様の操作を実行します。 | 皮尚在,毛被烧掉。 皮之不存,毛将焉附。 |
4 | supports | 現在のトランザクションをサポートします。 現在トランザクションが存在する場合は、そのトランザクションに参加し、現在トランザクションが存在しない場合は非トランザクションとして実行します。 | supports はトランザクションを作成しません。 |
5 | not_supported | トランザクションをサポートしません。 現在トランザクションが存在する場合は、現在のトランザクションを一時停止します。 現在トランザクションが存在しない場合は非トランザクションとして実行します。 | |
6 | mandatory | 強制的にトランザクションを使用する必要があります。 現在トランザクションが存在する場合は、そのトランザクションに参加し、現在トランザクションが存在しない場合は例外をスローします。 | 1、mandatory はトランザクションを作成しません。 2、mandatory を実行する前提はトランザクションが既に存在することです。 |
7 | never | トランザクションを禁止します。 現在トランザクションが存在する場合は例外をスローし、 現在トランザクションが存在しない場合は非トランザクション方式で実行します。 | 必ずトランザクションがない状態で実行する必要があります。そうでないとエラーが発生します。 |
事务传播的几种情况理解#
行为 | 类型 |
---|---|
有就加入,没有就算了 | supports |
外面有没有都要是新事务 | requires_new |
外面有就加入,没有就新事务 | required |
外面有就加入,保存点加入,没有就新事物 | nested |
不要事务,外面有先挂起 | not_supported |
要求外面有事务(不满足异常) | mandatory |
要求外面没有事务(不满足异常) | mandatory |
线程绑定(同步管理)#
この文は Mix Space によって xLog に同期更新されました。 原始リンクは https://me.liuyaowen.club/posts/default/Spring