Transactional事务传播行为?

简介: Transactional事务传播行为?

事务传播行为有7种,不是与数据库交互,数据库定义的,而是spring框架自带的。


本文主要介绍三种:required、nested、required_new。


Propagation_required(传播要求):


默认的,最常见的,如果当前没有事务,就新建事务执行,若有事务,就加入当前事务执行。外围方法未开启事务的情况下,内部两个事务开启此事务是互不干扰的,且不受外围异常影响。


默认传播要求下,内围事务里面若异常捕获到,则此内围事务里的其他程序正常运行。外围事务捕获到异常,外围及其其他内围事务不可以正常运行。


Propagation_supports(传播支持):支持当前事务,若没有事务,就以非事务执行。Propagation_mandatory(强制性):若当前无事务,抛出异常。


Propagation_requires_new:


新建事务,若当前存在事务,吧当前事务挂起。外围方法未开启事务的情况下,内部两个事务开启此事务是互不干扰的,且不受外围异常影响。


若外围开启事务,requeired内围事务和外围事务是同时回滚的。


若requreis_new内围事务异常未被捕获,则requeired内围事务与外围事务一起回滚,其他requreis_new内围事务不受影响。


若requreis_new内围事务异常被trycatch捕获,则外围其他事务不受影响。


Propagation_not_supported(非支持):以非事务操作,若当前存在事务,吧事务挂起。


Propagation_never:以非事务方式执行,若当前存在事务,则抛出异常。


Propagation_nested(传播嵌套):


如果当前存在事务,则在嵌套内执行,如果没有事务,则执行Propagation_required操作。外围方法未开启事务的情况下,内部两个事务开启此事务是互不干扰的,且不受外围异常影响。


1、propagaration_requeire_new与Propagation_nested嵌套传播区别:


Nested若外围事务开启,因为是父子嵌套事务,则子事务都随外围主事务的回滚而回滚,子事务滚回则所有事务一起回滚,除非当前子事务被trycatch捕获。而requeires_new外围事务和内围事务是两个事务,外围事务回滚不会影响内部事务。


2、Nested和requeired区别:


都会随着外围事务的回滚而一起回滚。Requeired是属于加入外围事务,因为都属于同一个事务,一旦内围事务回滚不管是否trycatch捕获,所有都一起回滚。而nested属于子事务,有单独的保存节点,所以nested方法抛出异常trycatch捕获被回滚,不会影响外围事务。


代码实例如下:


required实例,使用默认事务实例,不管是否捕获异常,全部一起回滚

image.png


nested实例,因为嵌套事务,外围内围都会随着互相回滚而回滚,除非子事务被捕获异常


image.png


required_new实例,当外围抛出异常时候,不会影响内围业务正常存入数据库


image.png

相关文章
|
存储 Java 数据库
Spring事务和事务传播机制
Spring事务和事务传播机制
101 0
|
7月前
|
Java 关系型数据库 MySQL
Spring事务和事务传播机制(1)
Spring事务和事务传播机制(1)
88 0
Spring事务和事务传播机制(1)
|
7月前
|
SQL Java 关系型数据库
Spring事务和事务传播机制(2)
Spring事务和事务传播机制(2)
61 0
Spring事务和事务传播机制(2)
|
Java 关系型数据库 MySQL
Spring的事务传播行为有哪些呢?Spring事务的隔离级别?讲下嵌套事务?
Spring的事务传播行为有哪些呢?Spring事务的隔离级别?讲下嵌套事务?
121 1
|
XML Java 数据库
详解事务的7种传播行为
什么是Spring事务的传播行为?事务传播行为的七种类型有哪些?将异常try-catch捕获,事务是否还会回滚?
277 0
详解事务的7种传播行为
声明式事务-- 事务的传播机制-- 事务传播机制种类
声明式事务-- 事务的传播机制-- 事务传播机制种类
78 0
|
Java 关系型数据库 MySQL
Spring事务(事务的实现、隔离级别、传播机制)(上)
Spring事务(事务的实现、隔离级别、传播机制)(上)
133 0
|
Java 关系型数据库 MySQL
Spring事务(事务的实现、隔离级别、传播机制)(下)
Spring事务(事务的实现、隔离级别、传播机制)(下)
169 0
|
Oracle 安全 Java
Spring事务传播属性和隔离级别
Spring事务传播属性和隔离级别 🍅程序员小王的博客:程序员小王的博客 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕 🍅java自学的学习路线:java自学的学习路线
179 0
Spring事务传播属性和隔离级别
|
Java 数据库 Spring
Spring中的事务传播机制和嵌套事务
Spring中声明式事务确实给我们带来了很大的便利,在Service层方法上带上@Transactional注解即可实现事务,首先看看@Transactional的默认配置: