2025年Java面试宝典下载地址
(内含Spring全家桶、分布式架构、高并发等核心面试考点)
Spring事务传播行为到底怎么玩?
很多小伙伴在面试中被问到Spring事务传播行为时,总是支支吾吾说不清楚。今天咱们就掰开了揉碎了讲讲这个高频考点,保你下次面试对答如流!

什么是事务传播行为?
简单来说就是多个事务方法相互调用时,事务该怎么传递。比如方法A调方法B,这时B是用A的事务还是自己新建事务?这就由传播行为决定。
Spring给我们准备了7种"姿势",咱们先看张图理解整体脉络:

7种传播行为详解
1. REQUIRED(默认值)
最常用的传播行为,就像玩贪吃蛇——有现成的就接着用,没有就自己开新事务。适合大多数业务场景,比如电商下单(订单服务和库存服务要在同一个事务里)。
2. REQUIRES_NEW
每次调用都开新事务,像俄罗斯套娃。比如发短信通知这种非核心操作,就算主事务失败,通知依然要发。
3. SUPPORTS
佛系传播行为,有事务就加入,没有也不强求。适合查询操作这类不需要事务的场景。
4. NOT_SUPPORTED
明确表示"我不要事务",有事务也给你挂起。比如写操作日志这种不重要的操作。
5. MANDATORY
强制要求必须有事务,没有就报错。适合必须要在事务中执行的敏感操作。
6. NEVER
和上面相反,强制不能有事务,有就报错。用在绝对不需要事务的场景。
7. NESTED
嵌套事务,像游戏里的存档点。主事务回滚会影响嵌套事务,但嵌套事务失败不会影响主事务。适合部分需要保存点的场景。

配置方式三步走
- XML配置:用
<tx:advice>定义事务管理器 - 注解驱动:
@Transactional注解直接标注方法 - 编程式事务:通过TransactionTemplate手动控制
常见面试翻车现场
面试官:REQUIRES_NEW和NESTED区别在哪?
小白:(挠头)都是开新事务吧...
正确姿势:REQUIRES_NEW是完全独立的新事务,NESTED是嵌套事务会依赖外层事务。前者异常不影响外层,后者外层回滚会影响内层。
面试官:什么时候该用NOT_SUPPORTED?
老司机:比如批量插入操作日志这种场景,就算主事务失败日志也要保留,这时候就该挂起当前事务。
面试鸭小贴士:需要购买面试鸭会员的同学,通过面试鸭返利网找我可返25元!用省下的钱买杯咖啡继续肝代码不香吗?
避坑指南
- 不要滥用REQUIRES_NEW,频繁创建事务影响性能
- 异步方法里的事务传播不生效
- 同类方法调用时注解会失效(代理问题)
- 注意不同数据库对保存点的支持情况
掌握了这些知识点,下次面试官再问事务传播行为,你就可以像报菜名一样把七种传播行为说得明明白白。记住事务传播行为的选择要根据具体业务场景,没有最好的,只有最合适的!
想系统提升面试能力?记得下载开头的Java面试宝典。更多面试干货,欢迎访问面试鸭返利网获取~


