技术文摘
Spring 事务相关面试题一道
Spring 事务相关面试题一道
在 Java 开发中,Spring 框架的事务管理是一个重要的知识点,也是面试中经常会被问到的内容。下面我们就来探讨一道与 Spring 事务相关的面试题。
题目:请简述 Spring 事务的传播行为,并举例说明在实际开发中的应用场景。
回答:Spring 事务的传播行为主要有七种,分别是 REQUIRED、REQUIRES_NEW、SUPPORTS、MANDATORY、NOT_SUPPORTED、NEVER 和 NESTED。
REQUIRED 是最常用的传播行为,如果当前没有事务,就新建一个事务;如果已经存在一个事务,就加入到这个事务中。比如在业务方法 A 中调用另一个业务方法 B,而方法 A 已经开启了事务,方法 B 的传播行为是 REQUIRED,那么方法 B 就会在方法 A 的事务中执行。
REQUIRES_NEW 则总是新建一个事务,如果当前存在事务,就把当前事务挂起。例如在方法 A 中有一个耗时较长的操作,为了不影响方法 A 事务的性能,可以将这个操作放在方法 B 中,并将方法 B 的传播行为设置为 REQUIRES_NEW,这样方法 B 就会在新的事务中执行。
SUPPORTS 表示如果当前存在事务,就加入到事务中;如果当前没有事务,就以非事务的方式执行。
MANDATORY 要求必须存在一个事务,如果不存在事务就会抛出异常。
NOT_SUPPORTED 表示以非事务的方式执行,如果当前存在事务,就把当前事务挂起。
NEVER 表示以非事务的方式执行,如果当前存在事务,就抛出异常。
NESTED 是一个嵌套事务,如果当前存在事务,则在嵌套事务内执行;如果当前没有事务,则与 REQUIRED 行为类似。
在实际开发中,传播行为的应用场景很多。比如,对于一些独立的、对事务完整性要求不高的操作,可以使用 SUPPORTS 或 NOT_SUPPORTED 传播行为,以提高性能。而对于一些关键的、必须保证事务一致性的操作,通常使用 REQUIRED 或 REQUIRES_NEW 传播行为。
理解和掌握 Spring 事务的传播行为对于正确处理复杂的业务逻辑和保证数据的一致性具有重要意义。通过合理地设置传播行为,可以提高系统的性能和可靠性。
- 面试冲刺:Properties 与 Yml 的差异
- 掌握 Vite 重构 Vue3 项目的方法
- WebAssembly 是什么?
- 如何在 Go 项目中使用枚举
- JVM 三色标记算法的奥秘所在
- 一款出色的 Go 调用链可视化工具
- 种子轮获 700w 融资,Astro 正式发布对前端界的影响
- Dubbo 高性能 RPC 框架的实践之路
- 首次使用 Web 认证框架 Shiro
- 阿里终面:OAuth2.0 与单点登录的差异解析
- Spring Security 权限控制之开篇(一)
- Spring Security 权限控制之二
- Go 版简单单例模式的实现,你写对了吗?
- 小小 IP 蕴含大耦合,真痛!
- 十年后程序员积累的编程知识有多少已无用?