当前位置 博文首页 > SiMenKouDeDaDuFo的博客:阿里三面的事务传播行为到底是什么?
人的一生就像在攀登高峰,勤奋是你踏实稳健的双脚,信念是你指引前行的向导,勇敢是你孜孜追寻的恒心。开心日到了,愿你站稳双脚,确定方向,向着你的理想巅峰勇敢前行,不用怕,未来就在你的脚下。
作为一名面试官,我在面试别人的时候,经常反复拿来问别人的一个问题,最近详细整理了一下,跟大家分享一下。总结的不好的地方或者有不同见解的地方欢迎大家私聊我一起探讨。
?
什么叫事务传播行为?听起来挺高端的,其实很简单。?
即然是传播,那么至少有两个东西,才可以发生传播。单体不存在传播这个行为。
事务传播行为(propagation behavior)指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行。?
例如:methodA事务方法调用methodB事务方法时,methodB是继续在调用者methodA的事务中运行呢,还是为自己开启一个新事务运行,这就是由methodB的事务传播行为决定的。
Spring定义了七种传播行为:
现在来看看传播行为其中的三个
如果存在一个事务,则支持当前事务。如果没有事务则开启一个新的事务。?
可以把事务想像成一个胶囊,在这个场景下方法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发现当前上下文有事务,因此就加入到当前事务中来。
如果存在一个事务,支持当前事务。如果没有事务,则非事务的执行。但是对于事务同步的事务管理器,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的事务中,事务地执行。
如果已经存在一个事务,支持当前事务。如果没有一个活动的事务,则抛出异常。???????
@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开发相关电子书,总有一款适合你,私聊获取
附赠2:成功入职大厂60k的简历模板,私聊获取
? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
cs