Spring propagation 事务传播机制的理解

概念理解

事务传播机制,字面理解,第一说明事务是可以传播的,第二事务传播就至少需要两个对象;更进一步理解,需要回答两个问题,一是传播是谁传播给谁?二是传播对事务有何影响?下面就试着回答这两个问题。

谁传播给谁?

所谓事务传播,个人理解就是指在有事务嵌套的情况下,当前进行的“事务“和外部“事务“的互相影响。这样来看,就是当前进行的“事务”会影响外部“事务”,即当前进行的事务传播给了外部“事务”;反过来,外部“事务”也会影响当前进行的“事务”,即外部“事务”传播给了当前进行的“事务”。

事务嵌套具体的说就是指方法A调用方法B。这时我们就说,方法A就是外部事务,方法B就是当前进行的事务。

在执行方法B时,它的执行是否加入外部事务,是否在独立的事务中运行,主要是看方法B设置的事务传播方式,但也需要参照外部事务方法A来决定,所谓参照,就是需要看方法A是否存在事务。

在执行方法A时,它的事务执行,一方面主要是看方法A设置的事务传播机制,另一方面也会受方法B事务机制的设置和执行情况的影响。

传播对事务有何影响?

事务传播机制(方法A调用方法B的场景下)
机制名称

最终事务

个数

方法A(外部事务)所受影响方法B(当前事务)
PROPAGATION_REQUIRED1个共同失败或成功如果外部没有事务,就新建一个事务,否则就加入外部事务
PROPAGATION_REQUIRED_NEW1个或2个被挂起始终会创建一个新事务
PROPAGATION_NEVER0个必须不存在事务必须在无事务的状态中执行,如果事务存在,则抛出异常
PROPAGATION_MANDATORY1个必须存在事务必须在事务中下执行,如果事务不存在,则抛出异常
PROPAGATION_SUPPORTS0个或1个无影响有没有事务都可以;有则在事务中执行,没有则在无事务状态中执行
PROPAGATION_NOT_SUPPORTS0个或1个如果有外部事务,则被挂起在无事务状态下执行
PROPAGATION_NEST1个或2个内部事务的回滚不影响外部事务的提交在嵌套事务中运行,如果外部不存在事务,则创建一个事务

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值