当前位置 博文首页 > SiMenKouDeDaDuFo的博客:阿里三面的事务传播行为到底是什么?

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

    作者:[db:作者] 时间:2021-07-04 18:56

    人的一生就像在攀登高峰,勤奋是你踏实稳健的双脚,信念是你指引前行的向导,勇敢是你孜孜追寻的恒心。开心日到了,愿你站稳双脚,确定方向,向着你的理想巅峰勇敢前行,不用怕,未来就在你的脚下。

    作为一名面试官,我在面试别人的时候,经常反复拿来问别人的一个问题,最近详细整理了一下,跟大家分享一下。总结的不好的地方或者有不同见解的地方欢迎大家私聊我一起探讨。

    ?

    事务传播行为

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

    事务传播行为(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个传播行为. 同时是在源码的角度讲解的.?

    图片

    私聊我,获取直播地址;

    私聊我,获取直播地址;

    私聊我,获取直播地址

    ?

    福利

    海量互联网大厂面试真题详解与大家分享,共同学习。 职业规划、简历指导、Java实用书籍、各种Java学习视频、技能的学习、思维的培养。 感兴趣的小伙伴可以关注一下我的CSDN账号,私聊获取个类资料。(或者微信账号:lagou2021)

    附赠1: 10G开发相关电子书,总有一款适合你,私聊获取

    图片.png

    图片.png

    附赠2:成功入职大厂60k的简历模板,私聊获取

    图片.png

    ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

    cs