Java面试题更新 2026-08-05

在 Spring 框架里,事务传播行为一共定义了哪几种?每种分别适用于什么场景?

后端开发技术原理方案权衡

考察说明

考察对 Spring 事务传播机制的理解和实际应用能力。

回答思路

  1. 【回答框架 1】PROPAGATION_REQUIRED 表示如果当前存在事务则加入,否则新建;是默认传播行为,适用于大多数需要事务保障的读写操作。
  2. 【回答框架 2】PROPAGATION_REQUIRES_NEW 表示无论当前是否存在事务都新建一个独立事务,用于确保内部操作不受外部事务回滚影响,如记录日志或异步通知。
  3. 【回答框架 3】PROPAGATION_SUPPORTS 表示当前存在事务则加入,否则以非事务方式执行;PROPAGATION_NOT_SUPPORTED 则以非事务方式运行,若存在事务则挂起。
  4. 【回答框架 4】PROPAGATION_MANDATORY 要求必须存在事务,否则抛异常;PROPAGATION_NEVER 要求不能存在事务,否则抛异常,用于明确禁止事务执行的场景。
  5. 【回答框架 5】PROPAGATION_NESTED 表示在一个事务内保存回滚点,内部事务回滚不会影响外部整体提交,但需底层数据库支持保存点。
  6. 【关键点 1】Spring 共定义 7 种事务传播行为。
  7. 【关键点 2】REQUIRED 是默认且最常用,适合绝大多数业务方法。
  8. 【关键点 3】REQUIRES_NEW 与 NESTED 都创建独立事务边界,但 NESTED 依赖保存点,回滚粒度更细。
  9. 【关键点 4】SUPPORTS、NOT_SUPPORTED、MANDATORY、NEVER 用于特定场景,需谨慎选择。
  10. 【关键点 5】传播行为仅在调用方和被调用方处于不同事务代理时生效,自调用默认不触发。
  11. 【易错点 1】自调用方法不会应用事务传播行为,因为绕过代理,需注入自身代理或使用 AspectJ 编译时织入。
  12. 【易错点 2】REQUIRES_NEW 会挂起外部事务,可能引发长时间锁竞争或死锁,需评估性能影响。
  13. 【易错点 3】NESTED 回滚保存点可能不被所有数据库支持,如部分情况下 MySQL 需要开启特定配置。