2025年Java面试宝典点击下载
(提取码:9b3g,建议保存备用)
Spring事务传播行为、隔离级别全解析
作为高频的面试考点,Spring事务的传播行为和隔离级别经常让开发者头疼。今天我们就用真实面试场景的问答形式,帮你彻底吃透这两个核心概念!

一、必须掌握的7种传播行为
当面试官问"说说Spring事务的传播行为",你可以这样组织答案:
传播行为本质是解决多个事务方法相互调用时,事务如何传递的问题。重点掌握这三个高频类型:
-
REQUIRED(默认)
- 当前没事务就新建,有就加入
- 适合大多数业务场景,比如订单创建后需要同时更新库存
-
REQUIRES_NEW
- 无论是否存在事务,都新建事务
- 典型场景:操作日志记录(即使主业务失败,日志仍需保存)
-
NESTED
- 嵌套事务,可以设置保存点回滚
- 典型应用:电商平台的优惠券核销(不影响主订单事务)
其他类型如SUPPORTS、NOT_SUPPORTED、NEVER、MANDATORY,可以根据实际场景补充说明。
二、隔离级别避坑指南
当被问到"事务隔离级别如何选择",需要分层次回答:
-
四种隔离级别
- READ_UNCOMMITTED(可能脏读)
- READ_COMMITTED(解决脏读,存在不可重复读)
- REPEATABLE_READ(解决不可重复读)
- SERIALIZABLE(完全串行,性能最低)
-
MySQL的默认隔离级别是REPEATABLE_READ,但Spring默认使用READ_COMMITTED
这个差异点经常被面试官深挖,务必注意! -
实战选择建议
- 金融交易类:推荐REPEATABLE_READ
- 普通业务:READ_COMMITTED足够
- 报表统计:可考虑READ_UNCOMMITTED提升性能

三、高频面试陷阱题
这里有几个真实面试中遇到的坑题,提前准备不吃亏:
-
嵌套事务异常回滚问题
@Transactional(propagation = Propagation.REQUIRED) public void A() { try { B(); } catch (Exception e) { // 处理异常 } } @Transactional(propagation = Propagation.REQUIRES_NEW) public void B() { // 抛出异常 }陷阱点:B方法的异常会导致整个事务回滚,即使A方法捕获了异常
-
超时设置不生效
当外层方法已经开启事务,内层方法的超时设置会被忽略
四、性能优化关键点
-
@Transactional注解要加在实现类而不是接口
避免因代理方式不同导致注解失效 -
只读查询加readOnly=true
可以优化数据库连接使用 -
避免在循环中频繁启停事务
推荐批量处理+单个事务

如果需要系统准备Java面试,推荐使用面试鸭返利网购买会员,通过本站专属链接可返现25元!更多技术干货可以下载我们整理的面试宝典:2025年Java面试宝典(提取码:9b3g)


