一个工作了 2 年的粉丝,私信了一个比较简单的问题。
说: “Spring 中事务的传播行为有哪些?”
他说他能记得一些,但是在项目中基本上不需要配置,所以一下就忘记了。
结果导致面试被拒绝,有点遗憾!
ok,关于这个问题,看看高手的回答。
一、问题解析
对于这个问题,需要从几个方面去回答。首选, 所谓的事务传播行为,就是多个声明了事务的方法相互调用的时候,这个事务应该如何传播。(如图)比如说,methodA()调用 methodB(),两个方法都显示的开启了事务。那么 methodB()是开启一个新事务,还是继续在 methodA()这个事务中执行?就取决于事务的传播行为。
在 Spring 中,定义了 7 种事务传播行为。
1. REQUIRED:默认的 Spring 事物传播级别,如果当前存在事务,则加入这个事务,如果不存在事务,就新建一个事务。
2. REQUIRE_NEW:不管是否存在事务,都会新开一个事务,新老事务相互独立。外部事务抛出异常回滚不会影响内部事务的正常提交。
3. NESTED:如果当前存在事务,则嵌套在当前事务中执行。如果当前没有事务,则新建一个事务,类似于 REQUIRE_NEW。
4. SUPPORTS:表示支持当前事务,如果当前不存在事务,以非事务的方式执行。
5. NOT_SUPPORTED:表示以非事务的方式来运行,如果当前存在事务,则把当前事务挂起。
6. MANDATORY:强制事务执行,若当前不存在事务,则抛出异常.
7. NEVER:以非事务的方式执行,如果当前存在事务,则抛出异常。
Spring 事务传播级别一般不需要定义,默认就是 PROPAGATION_REQUIRED,除非在嵌套事务的情况下需要重点了解。
以上就是我对这个问题的理解!
二、面试总结
这个问题其实只需要理解事务传播行为的本质以及为什么需要考虑到事务传播的问题。就可以直接基于自身的技术积累来推演出答案,无非就是基于可能的策略进行穷举,怎么也能推演出 5 种吧。
好的,本期的高手面试系列的文章就到这里结束了。
有任何不懂的技术面试题,欢迎随时私信我
我是 Mic,一个工作了 14 年的 Java 程序员,咱们下期再见。
三、2024最新Java高频面试题 (金三银四面试必备!!!)
视频链接如下点击即可观看
2024最新Java高频面试题,金三银四刷完春招面试就稳了!
四、粉丝福利
最近很多同学问我有没有java学习资料,我根据我从小白到架构师多年的学习经验整理出来了一份50W字面试解析文档、简历模板、学习路线图、java必看学习书籍 、 需要的小伙伴 可以关注我
公众号:“ 灰灰聊架构 ”, 回复暗号:“ 321 ”即可获取