阿里三连问: 事务传播行为到底是什么?

19 篇文章 1 订阅
18 篇文章 0 订阅

阿里三面的事务传播行为到底是什么?

世人都劝我们要适应环境,其实,他们忘了,我们也是环境的一部分,会影响、鞭策着他人,所以,改变自己更是改变环境的一种呀。从我做起,开始学习,继续坚持,Java的未来,还靠你们。大家加油!。没错,对于整个职业生涯来说,现在的确是刚开始。

事务传播行为

什么叫事务传播行为?听起来挺高端的,其实很简单。
即然是传播,那么至少有两个东西,才可以发生传播。单体不存在传播这个行为。

事务传播行为(propagation behavior)指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行。
例如:methodA事务方法调用methodB事务方法时,methodB是继续在调用者methodA的事务中运行呢,还是为自己开启一个新事务运行,这就是由methodB的事务传播行为决定的。

Spring定义了七种传播行为:

现在来看看传播行为其中的三个

1、PROPAGATION_REQUIRED

如果存在一个事务,则支持当前事务。如果没有事务则开启一个新的事务。
可以把事务想像成一个胶囊,在这个场景下方法B用的是方法A产生的胶囊(事务)。

举例有两个方法:

@Transactional(propagation = Propagation.REQUIRED)
public void methodA() { 
  methodB();
  // do something
} 
@Transactional(propagation = Propagation.REQUIRED)
public void methodB() { 
  // do something
} 

单独调用methodB方法时,因为当前上下文不存在事务,所以会开启一个新的事务。
调用methodA方法时,因为当前上下文不存在事务,所以会开启一个新的事务。当执行到methodB时,methodB发现当前上下文有事务,因此就加入到当前事务中来。

2、PROPAGATION_SUPPORTS

如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行。但是对于事务同步的事务管理器,PROPAGATION_SUPPORTS与不使用事务有少许不同。

举例有两个方法:

@Transactional(propagation = Propagation.REQUIRED)
public void methodA() {
  methodB();
  // do something
} 
// 事务属性为SUPPORTS
@Transactional(propagation = Propagation.SUPPORTS)
public void methodB() { 
  // do something
} 

单纯的调用methodB时,methodB方法是非事务的执行的。当调用methdA时,methodB则加入了methodA的事务中,事务地执行。

3、PROPAGATION_MANDATORY

如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。

@Transactional(propagation = Propagation.REQUIRED)
public void methodA() { 
  methodB();
  // do something
} 
// 事务属性为MANDATORY
@Transactional(propagation = Propagation.MANDATORY)
public void methodB() { 
  // do something
} 

当单独调用methodB时,因为当前没有一个活动的事务,则会抛出异常throw new IllegalTransactionStateException(“Transaction propagation ‘mandatory’ but no existing transaction found”);当调用methodA时,methodB则加入到methodA的事务中,事务地执行。

通过上面三个的介绍,相信大家对Spring事务传播行为有了一定理解,那么还有其他4种传播行为是怎么样的呢? 大家别着急请关注我们直播课程**<阿里三面:Spring事务传播行为的底层原理>** 在本次课程中有深入讲解7个传播行为. 同时是在源码的角度讲解的.

插句题外话,对于初学者来讲一些初级或者刚工作的同学,刚开始没有合适的书籍或者是资源,那么学习过程适非常痛苦的。我整理的部分书籍开源项目前已经有200+并持续更新,并且我也可以亲自指导学习Java,对于想入门的同学很有帮助:

技术github学习地址:https://github.com/codeGoogler/JavaCodeHub
程序员编程书籍:https://github.com/codeGoogler/

初学者如何找到优秀的资源

  • 海量互联网大厂面试真题详解与大家分享,共同学习。
  • 职业规划、简历指导
  • Java实用书籍
  • 各种Java学习视频
  • 技能的学习,思维的培养
  • 感兴趣的小伙伴可以关注一下我的账号 @码农突击

或者 添加我微信:codeinfo2014
附赠:10G开发相关电子书,总有一款适合你。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值