前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring中的事务传播行为有哪些?

Spring中的事务传播行为有哪些?

作者头像
Tom弹架构
发布2022-12-19 18:14:58
6330
发布2022-12-19 18:14:58
举报
文章被收录于专栏:Tom弹架构

1位工作2年的小伙伴面试的时候被问到这样一个问题,说,Spring中的事务传播行为有哪些?他说他在面试的时候能想起来一些,但在实际项目开发中又基本不需要配置。所以,在面试的时候回答不全,最后被拒了,觉得有些遗憾。

今天,我给大家分享一下,我对Spring传播行为的理解。

另外,我把往期分享的视频全部整理成了1份20W字的文档,后续还会连更,希望能够以此来提高各位粉丝的面试通过率,想获取的小伙伴可以在我的个人煮叶简介中找到。

1、事务传播行为

ENTER TITLE

在日常开发中,我们经常会存在多个声明了事务的方法相互调用,在这种情况下,会存在嵌套两个或两个以上事务的情况,所谓事务传播行为就是指这些事务之间的传播规则。来看这样一段代码:

@Transaction(Propagation = REQUIRED_NEW)

public void methodA(){

}

@Transaction(Propagation = REQUIRED)

public void methodB(){

methodA();

}

在这段代码中,methodB()调用了methodA(),两个方法都显示的开启了事务。methodA()是开启一个新事务,还是继续在methodB()这个事务中执行?就取决于事务的传播行为规则的定义。

2、事务嵌套

ENTER TITLE

事务嵌套是指两个或两个以上开启的事务的方法嵌套调用,在这种情况下,需要制定这些事务之间的传播行为规则。在Spring中,一共定义了7种内置的事务嵌套传播行为:

第1种:REQUIRED,它是Spring默认的事务传播行为。表示如果当前存在事务,则加入这个事务,如果不存在事务,就新建一个事务。

第2种:REQUIRE_NEW:表示不管是否存在事务,都会新建一个事务,新建的事务和原来已经定义的事务相互独立。外部事务抛出异常回滚不会影响内部事务的正常提交。

第3种:NESTED:如果当前存在事务,则嵌套在当前事务中执行。如果当前没有事务, 则新建一个事务,类似于REQUIRE_NEW。

第4种:SUPPORTS:表示支持当前事务,如果当前不存在事务,以非事务的方式执行。

ENTER TITLE

第5种:NOT_SUPPORTED:表示以非事务的方式来运行,如果当前存在事务,则把当前事务挂起。

第6种:MANDATORY:强制事务执行,若当前不存在事务,则抛出异常.

第7种:NEVER:以非事务的方式执行,如果当前存在事务,则抛出异常。

ENTER TITLE

Spring事务传播一般不需要开发人员显式定义,默认就是PROPAGATION_REQUIRED,只要在嵌套事务的情况下需要重点了解。

以上就是我对这个问题的理解。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-08-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Tom弹架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档