You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring @Transactional注解回滚测试失效,配置rollbackFor仍插入数据原因排查

Spring事务回滚不生效的原因排查方向

  • 数据库层面不支持事务
    以MySQL为例,需确认Member表使用的是InnoDB存储引擎,MyISAM引擎原生不支持事务,即使Spring侧配置正确也无法触发回滚操作。
  • @Transactional注解本身未生效
    以下几种场景都会导致事务注解失效:
    1. Service类未添加@Service/@Component注解,未被Spring IOC容器托管,Spring无法生成对应的事务代理对象
    2. 未开启事务管理:传统Spring项目需在配置类添加@EnableTransactionManagement注解,SpringBoot 1.4及以上版本默认开启,低版本需手动配置
    3. 事务管理器配置错误:使用JPA、MyBatis等持久层框架时,需要配置对应的PlatformTransactionManager实现类;多数据源场景下未指定对应事务管理器也会导致事务失效
    4. 注解导入错误:确认导入的是org.springframework.transaction.annotation.Transactional,而非JTA规范的javax.transaction.Transactional,后者在Spring原生事务体系中不生效
  • 异常被提前吞掉未抛到事务切面
    这是你当前场景最可能的问题:如果项目中配置了@RestControllerAdvice全局异常处理器,且捕获了NullPointerException类型异常,捕获后没有再次抛出的话,Spring事务切面感知不到异常发生,会直接提交事务,导致数据被写入数据库。你贴出的业务代码没有手动捕获异常,优先排查全局异常处理器的配置逻辑。
  • 同类内部调用导致失效(当前场景不涉及,为通用失效原因)
    如果@Transactional注解加在内部被调用的exception()方法上,同类内部方法调用不会走Spring代理对象,事务会直接失效。但你当前事务是加在被外部调用的transactionTest()方法上,不属于该场景。

内容的提问来源于stack exchange,提问作者유호연

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 16:45:01