【5分钟背八股】Spring的事务传播机制是什么?

多个事务方法相互调用时,事务如何在这些方法之间进行传播,spring中提供了7中不同的传播特性,来保证事务的正常执行:

  • REQUIRED:默认的传播特性,如果当前没有事务,则新建一个事务,如果当前存在事务,则加入这个事务

  • SUPPORTS:当前存在事务,则加入当前事务,如果当前没有事务,则以非事务的方式执行

  • MANDATORY:当前存在事务,则加入当前事务,如果当前事务不存在,则抛出异常

  • REQUIRED_NEW:创建一个新事务,如果存在当前事务,则挂起改事务

  • NOT_SUPPORTED:以非事务方式执行,如果存在当前事务,则挂起当前事务

  • NEVER:不使用事务,如果当前事务存在,则抛出异常

  • NESTED:如果当前事务存在,则在嵌套事务中执行,否则REQUIRED的操作一样

NESTED和REQUIRED_NEW的区别:

REQUIRED_NEW是新建一个事务并且新开始的这个事务与原有事务无关,而NESTED则是当前存在事务时会开启一个嵌套事务,在NESTED情况下,父事务回滚时,子事务也会回滚,而REQUIRED_NEW情况下,原有事务回滚,不会影响新开启的事务

NESTED和REQUIRED的区别:

REQUIRED情况下,调用方存在事务时,则被调用方和调用方使用同一个事务,那么被调用方出现异常时,由于共用一个事务,所以无论是否catch异常,事务都会回滚,而在NESTED情况下,被调用方发生异常时,调用方可以catch其异常,这样只有子事务回滚,父事务不会回滚。


【5分钟背八股】09:spring的事务传播机制是什么?.png

推荐学习:【5分钟背八股】spring框架中使用了哪些设计模式及应用场景?

#java后端面试##笔试题目#
Java八股文 文章被收录于专栏

长期分享Java面试、面经、学习、架构笔记

全部评论

相关推荐

前言:面试官说不方便开摄像头,而且有很大杂音,感觉应该是没在会议室设备不好之类的。不知道是不是KPI面面试总时长1个小时,没有录音,以下是回忆:1. 先在聊天里给了一个代码(主要与可变参数函数和越界访问段错误有关),让我判断编译能不能通过,运行会不会崩溃(这块是print函数输出,平时本菜狗很少用,连%d输出的是整数还是浮点都忘记了,尬死我了,但最后回答应该是没错的)2. 现在我在一个客户端向服务端发送数据,什么情况下会导致发送阻塞,底层原因是什么?(这里从socket发送缓冲区和TCP滑动窗口机制回答的)3. 直接开始项目,问了我的第一个项目,提了一嘴很少看到有人写这个,让我讲述一下动机,从前期技术选型到中期代码实现到后期优化测试都讲了一遍,然后问了项目中io_uring和eventfd实现、Reactor和Proactor模型区别,有栈协程和无栈协程,ucontext与其他协程上下文实现有做过对比(没做过)4. 问第二个项目,主要问了Raft算法,引申出一个分布式场景题:一个分布式集群,每个节点存储的数据量很大,其中一个节点宕机,为了恢复服务需要新加入一个节点,那么就要将其他节点的备份数据复制到新节点,问因为数据量很大,复制导致带宽占用很大,影响了其他节点的正常服务,你会如何解决?(答了在低峰期复制,在高峰期使用转发机制)5. 写项目的时候有没有用到AI,是如何用的?6. 如果让你借助AI从0实现一个Raft算法,你会如何与AI交流?7. 写给AI看的文档和写给人看的文档有什么区别?(内心OS:这是什么问题?)8. 反问:部门业务,实习时间要求,下一面时间(这里面试官说“在我这没问题”,是不是过了)
查看16道真题和解析
点赞 评论 收藏
分享
评论
点赞
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务