@transactional事务不生效的场景
时间: 2023-08-29 17:10:47 浏览: 113
Spring的事务10种常见失效场景总结.zip
@transactional 注解可以确保在方法执行过程中的所有数据库操作都要么全部成功提交,要么全部失败回滚。但是,有一些情况下 @transactional 注解可能不会生效:
1. 注解放在了 private 方法上:只有 public 方法才会被代理,如果把注解放在 private 方法上,代理无法生效。
2. 注解放在了静态方法上:Spring AOP 无法代理静态方法,因此注解放在静态方法上也不会生效。
3. 注解放在了本类内部调用的方法上:方法调用会被 JVM 解释为一个普通方法调用,而不是通过代理对象调用,因此注解不会生效。
4. 抛出异常时不是 unchecked exception:@transactional 默认只回滚未检查异常,如果抛出的是 checked exception,事务不会回滚。
5. 多个事务注解嵌套:如果在一个事务方法中调用另一个事务方法,且两个方法都有 @transactional 注解,那么嵌套的事务可能不会生效。这时可以使用 Propagation 属性来指定事务的传播行为,或者使用外部事务管理器来控制事务。
阅读全文