一个工作了2年的粉丝,私信了一个比较简单的问题。
说: “Spring中事务的传播行为有哪些?”
他说他能记得一些,但是在项目中基本上不需要配置,所以一下就忘记了。
结果导致面试被拒绝,有点遗憾!
ok,关于这个问题,看看普通人和高手的回答。
部分高手面试文档已整理,需要的小伙伴可以扫描添加下方二维码
普通人:
嗯。。。。。。。。。
高手:
对于这个问题,需要从几个方面去回答。
首选, 所谓的事务传播行为,就是多个声明了事务的方法相互调用的时候,这个事务应该如何传播。
比如说,methodA()调用methodB(),两个方法都显示的开启了事务。
那么methodB()是开启一个新事务,还是继续在methodA()这个事务中执行?就取决于事务的传播行为。
在Spring中,定义了7种事务传播行为。
-
REQUIRED:默认的Spring事物传播级别,如果当前存在事务,则加入这个事务,如果不存在事务,就新建一个事务。
-
REQUIRE_NEW:不管是否存在事务,都会新开一个事务,新老事务相互独立。外部事务抛出异常回滚不会影响内部事务的正常提交。
-
NESTED:如果当前存在事务,则嵌套在当前事务中执行。如果当前没有事务, 则新建一个事务,类似于REQUIRE_NEW。
-
SUPPORTS:表示支持当前事务,如果当前不存在事务,以非事务的方式执行。
-
NOT_SUPPORTED:表示以非事务的方式来运行,如果当前存在事务,则把当前事务挂起。
-
MANDATORY:强制事务执行,若当前不存在事务,则抛出异常.
-
NEVER:以非事务的方式执行,如果当前存在事务,则抛出异常。
Spring事务传播级别一般不需要定义,默认就是PROPAGATION_REQUIRED,除非在嵌套事务的情况下需要重点了解。
以上就是我对这个问题的理解!
总结
这个问题其实只需要理解事务传播行为的本质以及为什么需要考虑到事务传播的问题。
就可以直接基于自身的技术积累来推演出答案,无非就是基于可能的策略进行穷举,怎么也能推演出5种吧。
本期的普通人VS高手面试系列就到这里结束了。
有任何不懂的技术面试题,欢迎随时私信我
部分高手面试文档已整理,需要的小伙伴可以扫描添加下方二维码
↓↓↓↓↓↓↓↓