spring的事务传播行为
程序员文章站
2022-06-30 13:23:57
1、PROPAGATION_REQUIRED:如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的设置。 2、PROPAGATION_SUPPORTS:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就以非事务执行。 3、PROPAGATION_MA ......
1、propagation_required:如果当前没有事务,就创建一个新事务,如果当前存在事务,就加入该事务,该设置是最常用的设置。
比如说,serviceb.methodb的事务级别定义为propagation_required, 那么由于执行servicea.methoda的时候,servicea.methoda已经起了事务, 这时调用serviceb.methodb,serviceb.methodb看到自己已经运行在servicea.methoda的事务内部,就不再起新的事务。而假如servicea.methoda运行的时候发现自己没有在事务中, 他就会为自己分配一个事务。这样,在servicea.methoda或者在serviceb.methodb内的任何地方出现异常,事务都会被回滚。 即使serviceb.methodb的事务已经被提交,但是servicea.methoda在接下来fail要回滚,serviceb.methodb也要回滚
2、propagation_supports:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就以非事务执行。
比如说,执行servicea.methoda的时候,servicea.methoda已经起了事务,这时调用serviceb.methodb,
3、propagation_mandatory:支持当前事务,如果当前存在事务,就加入该事务,如果当前不存在事务,就抛出异常。serviceb.methodb看到自己已经运行在servicea.methoda的事务内部,就加入该事务。如果servicea.methoda没有创建事务,那么serviceb.methodb久会以非事务执行。
4、propagation_requires_new:创建新事务,无论当前存不存在事务,都创建新事务。
5、propagation_not_supported:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
6、propagation_never:以非事务方式执行,如果当前存在事务,则抛出异常。
7、propagation_nested:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与propagation_required类似的操作。
下一篇: 恋爱谈着谈着就分手了
推荐阅读
-
spring5 源码深度解析----- 事务的回滚和提交(100%理解事务)
-
简单了解Spring中的事务控制
-
基于Spring Cloud Netflix的TCC柔性事务和EDA事件驱动示例
-
浅谈Spring事务传播行为实战
-
Spring的事务机制实例代码
-
JavaScript实现事件的中断传播和行为阻止方法示例
-
Mybaits 源码解析 (十二)----- Mybatis的事务如何被Spring管理?Mybatis和Spring事务中用的Connection是同一个吗?
-
Spring 事务隔离与事务传播的详解与对比
-
spring事务的@Transactional使用事务不生效问题
-
Spring事务的开启原理详解