SpringBoot 数据库事务7种传播行为

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot 数据库事务7种传播行为相关的知识,希望对你有一定的参考价值。

参考技术A

如果当前方法的执行上下文中已经打开了事务,那么就使用当前这个事务。

如果当前没有事务,就创建一个新的。

如果多个方法都声明了 REQUIRED ,并且他们嵌套调用,那么他们会共享同一个物理事务。就是 inner 产生了回滚,那么 outer 会跟着回滚。

Outer bean

Inner bean

inner 声明了 REQUIRED ,并抛出了异常,outer 事务将同样回滚,因为他们是同一个事务。

声明 REQUIRES_NEW 的话就会创建一个新的物理事务,内层事务的提交回滚都是独立于外层事务的。外层事务不受内层事务结果的影响,他们运行于独立的物理事务。

Outer bean

Inner bean

inner 的回滚不影响 outer 的事务。当 inner 事务开启后,outer 事务会暂停,当 inner 事务结束后,outer 事务恢复。

NESTED 使嵌套的事务使用相同的物理事务,但是对嵌套调用设置了保存点,所以 inner 事务可以独立于 outer 事务回滚。

支持事务,如果当前存在事务,就沿用当前事务,如果不存在,则继续采用无事务的方式运行。

必须使用事务。如果当前没有事务,则会抛出异常,如果存在当前事务,就沿用当前事务。

不支持事务,当前存在事务时,将挂起事务,运行方法。

不支持事务,如果当前方法存在事务,则抛出异常,否则继续使用无事务机制运行。

参考:
https://www.byteslounge.com/tutorials/spring-transaction-propagation-tutorial

以上是关于SpringBoot 数据库事务7种传播行为的主要内容,如果未能解决你的问题,请参考以下文章

Spring的4种事务特性,5种隔离级别,7种传播行为

数据库事务4种隔离级别和7种传播行为

Spring事务传播行为详解

spring事务的7种传播行为

spring的4种事务特性,5种隔离级别,7种传播行为

spring的4种事务特性,5种隔离级别,7种传播行为