Spring事务传播机制一图解释

        方法A中调用了事务方法B,事务传播机制是作用于被调用方法的,也就是B方法

方法B定义的事务类型解释A方法有事务时A方法无事务

@Transactional(propagation = Propagation.REQUIRED) 

如果当前存在事务,那么就加入这个事务,不存在就新建一个事务B和A事务合并成一个事务,当事务B异常回滚时,A方法也被回滚,因为是同一个事务,反之亦然B新建一个事务
@Transactional(propagation = Propagation.SUPPORTS)如果当前有事务,加入事务,如果没有则不使用事务B加入到A事务中,即是同一事务,当B事务异常回滚时,A事务也会回滚,反之亦然B无事务
@Transactional(propagation = Propagation.NOT_SUPPORTED)  表示不支持事务,如果有事务也不加入事务,没有事务以非事务运行

挂起A事务,B以无事务方式执行

(事务挂起理解:方法A调用方法B,方法A打开的 Transaction将挂起,方法B中任何数据库操作,都不在该Transaction的管理之下。
当方法B返回,方法A继续运行,之前的Transaction恢复,后面的数据库操作继续在该Transaction的控制之下 提交或回滚)

B无事务
@Transactional(propagation = Propagation.REQUIRES_NEW) 不管是否存在事务,都以最新的事务执行,执行完再执行旧的事务B新建一个事务,和A事务无关,互不影响B新建一个事务
@Transactional(propagation = Propagation.MANDATORY)  必须在一个事务中执行,如果没有事务,则抛出异常B加入到A事务中,即是同一事务,当B事务异常回滚时,A事务也会回滚,反之亦然B抛异常
@Transactional(propagation = Propagation.NEVER)  以非事务的方式执行,如果存在事务异常B抛异常B无事务
@Transactional(propagation = Propagation.NESTED)  如果调用者不存在事务,那么被调用者自己创建事务,这种情况和REQUIRE一样。如果调用者存在事务,那么被调用者就在调用者的事务里嵌套一个事务,称为嵌套事务B新建一个A的子事务,A异常影响B,B异常不影响AB新建一个事务

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值