Spring的事务传播特性

一、什么是事务的传播特性?

事务属性的种类:传播行为、隔离级别、只读和事务超时。
事务传播行为就是多个事务方法相互调用时,事务如何在这些方法间传播。

例如:

A,B两个方法都有事务,在A方法中去调用B方法,此时事务方法应该如何进行处理。
比如 A方法里面调用B方法。
情况一:A方法出现异常,A方法需要回滚,那么B方法需不需要回滚呢?
情况二:B方法出现异常,B方法需要回滚,那么A方法需不需要回滚呢?

二、事务的七大传播特性

propagation_XXX我的理解官方
propagation_requierd子事务共用父事务,谁有异常都回滚(同甘共苦)支持一个当前事务;如果不存在,创建一个新的。
propagation_required_new子事务单干,父、子事务互不影响(前提:父事务做了子事务的异常捕获,否则子事务可影响父事务)(子成年自立)创建一个新的事务,如果存在当前事务的话暂停(挂起)当前事务 。
propagation_nested子事务受父事务影响,父事务不受子事务影响(前提:父事务做了子事务的异常捕获,否则子事务可影响父事务)(子幼儿时期)如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与propagation_requierd类似的操作
propagation_supports支持事务:如果有父事务,就共用父事务;否则子事务也不存在 (必须存在父亲,否则儿子也不存在支持当前事务;如果不存在当前事务则执行非事务。
propagation_not_supported该方法非事务地执行,不参与事务(不认父亲)不执行当前事务;而是总是执行非事务
propagation_mandatory强制使用当前事务,不存在父事务,抛异常支持当前事务;如果不存在当前事务则抛出一个异常
propagation_never强制非事务方式执行,存在父事务,抛异常不支持当前事务;如果存在当前事务则抛出一个异常

三、默认传播行为

Spring 默认的事务传播行为是 propagation_requierd ,它适合于绝大多数的情况。假设 ServiveY#methodY() 都工作在事务环境下(即都被 Spring 事务增强了),假设程序中存在如下的调用链:Service1#method1() -> Service2#method2() -> Service3#method3(),那么这3个服务类的3个方法 通过 Spring 的事务传播机制都工作在同一个事务中

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值