Spring 内部调用,事务真会失效吗?
Spring 事务失效问题深入分析:非代理内部调用 先说结论。非Spring代理的内部调用,事务本身不会失效。但 @Transactional 注解会因为代理失效而失效。 代码示例 同一个类 TransactionUserService 中。 @Transactional public void a() { userMapper.insert("A"); b(); throw new RuntimeException("触发回滚"); } @Transactional(propagation = Propagation.REQUIRES_NEW) public void b() { userMapper.insert("B"); } 结果:A、B记录均回滚。 你的预期是否是:A 回滚,B 提交? 如果是。此时你应该在思考, b() 的事务已失效,为什么 b() 还会被回滚?但其实此时 b() 的事务并未失效,失效的只是 @Transactional(propagation = Propagation.REQUIRES_NEW) 注解本身。我们接着往下验证。 通过事务信息验证 在 a() 和 b() 中使用 TransactionSynchronizationManager.*getResourceMap*() 打印事务信息: // a() 中打印 System.out.println(TransactionSynchronizationManager.getResourceMap()); // b() 中打印 System.out.println(TransactionSynchronizationManager.getResourceMap()); 打印结果: a() 事务信息 {{ CreateTime:"2025-02-14 14:10:00", ActiveCount:1, PoolingCount:0, CreateCount:1, DestroyCount:0, CloseCount:0, ConnectCount:1, ...