栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

spring 事务传播机制总结

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

spring 事务传播机制总结

spring事务的传播机制定义在 TransactionDefinition 接口中,定义了如下传播类型

PROPAGATION_REQUIRED

支持当前事务,如果没有当前事务就创建一个新的事务,是默认的传播行为。

外围方法未开启事务

内部会创建新事务,若新事务回滚,不影响外围方法。

外围方法开启事务

内部方法会加入到外围方法的事务中,使用同一个事务,不管内外谁发生异常,整个事务都将回滚。

	int PROPAGATION_REQUIRED = 0;

PROPAGATION_SUPPORTS

支持当前事务,如果没有事务就以非事务方式执行。

外围方法未开启事务

以非事务方法运行。

外围方法开启事务

内部方法会加入到外围方法的事务中,使用同一个事务,不管内外谁发生异常,整个事务都将回滚。

    
	int PROPAGATION_SUPPORTS = 1;

PROPAGATION_MANDATORY

mandatory是强制的意思,支持当前事务,如果没有事务,就抛出一个异常

外围方法未开启事务

抛出一个异常。

外围方法开启事务

内部方法会加入到外围方法的事务中,使用同一个事务,不管内外谁发生异常,整个事务都将回滚。

	
	int PROPAGATION_MANDATORY = 2;

PROPAGATION_REQUIRES_NEW

不管当前是否存在事务,都创建一个新事务,如果存在事务,将当前事务暂停(挂起)

外围方法未开启事务

内部会创建新事务,若内部事务回滚,不影响外围方法。

外围方法开启事务

内部方法依然会单独开启独立事务,且与外部方法事务也独立,内部方法之间、内部方法和外部方法事务均相互独立,互不干扰。

代码验证REQUIRES_NEW事务传播机制

代码验证REQUIRES_NEW事务传播机制https://blog.csdn.net/leisure_life/article/details/124478838

    
	int PROPAGATION_REQUIRES_NEW = 3;

PROPAGATION_NOT_SUPPORTED

不支持事务,不管当前是否存在事务都以非事务方式执行。

外围方法未开启事务

以非事务方式执行。

外围方法开启事务

以非事务方式执行。

    
	int PROPAGATION_NOT_SUPPORTED = 4;

PROPAGATION_NEVER

不支持事务,如果存在事务,会抛出一个异常

外围方法未开启事务

以非事务方式执行。

外围方法开启事务

抛出一个异常。

	
	int PROPAGATION_NEVER = 5;

PROPAGATION_NESTED

如果存在当前事务,则在嵌套事务中执行,如果不存在事务,则和PROPAGATION_REQUIRED一样,会新建一个事务。

外围方法未开启事务

与Propagation.REQUIRED 作用相同,内部会创建新事务,若内部事务回滚,不影响外围方法。

外围方法开启事务

修饰的内部方法属于外部事务的子事务,外围主事务回滚,子事务一定回滚,而内部子事务可以单独回滚而不影响外围主事务和其他子事务。

	
	int PROPAGATION_NESTED = 6;

总结

required,有就加入,没有就自己动手

required_new,不求人,自己动手,丰衣足食,互不干扰

supports,有就加入,没有也无所谓。

not_supports,有我也不用。

never,必须没有,有了就抛异常。

mandatory 与 never是一对反义词,mandatory 是必须共用一个事物,否则就抛异常;而never必须无事务,有事务就抛异常。

nested,有就嵌套,没有就玩自己的,外部影响内部,内部不影响外部。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/848311.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号