Spring中事务失效的场景

Spring 的事务管理是通过 AOP(面向切面编程)实现的,并且依赖于代理机制。具体来说,Spring 使用动态代理来增强目标对象,从而在方法调用前后插入事务管理的逻辑。

那么失效的场景就有:

  • 使用 try-catch语句块,对异常进行捕获,但没有将异常抛出去(人家怎么知道出现异常了),事务失效。
  • rollbackFor使用默认的,默认的只会回滚RuntimeException和Error异常,那些检查异常不会回滚。配置 rollbackFor 属性为 Exception。
  • 方法或者类被final修饰。动态代理的本质是继承你这个类,都final了,怎么继承。
  • 方法不是public修饰的,你都private了,人家怎么走代理。
  • 方法是static修饰的静态方法。静态方法属于类,不属于任何实例。
  • 事务传播行为使用错误。
  • 如果方法 A 和方法 B 在同一个类中,由于 Spring 默认使用 JDK 动态代理(基于接口)或 CGLIB 代理(基于子类),​自调用(即同一个类中的方法调用)不会触发代理机制,导致方法 B 的事务传播行为失效。
  • 使用的数据库引擎是MyISAM,这个引擎不支持事务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值