About Me
欢迎各位读者访问,大家一起学习。
优秀是一种习惯♡♡♡
做更好的自己!
本人见识有限,写到博客难免有错误或疏忽的地方,还望各位大佬多多指点,在此表示感激不尽。♡♡♡
Spring事务的失效场景:
Spring事务本质就是数据库对事务的支持,没有数据库事务的支持,Spring是无法提供事务功能的。Spring事务有声明式事务,编程式事务。Spring支持声明式事务,也就是使用注解的方式,它使用@Transactional注解在方法上表明该方法需要事务支持。Spring事务底层是基于AOP的思想,AOP底层使用的是动态代理,动态代理又分为JDK动态代理和cglib动态代理。因为JDK是代理接口,所以私有的方法不会存在接口当中。所以不会被拦截。
- 失效的场景:
- 方法使用final修饰
- 方法访问权限问题:事务生效只支持public
- 方法内部的调用,因为同一个对象内调用时没有使用代理。没有被AOP事务管理器控制
- 没有被Spring管理,可能是开发过程中忘记@Service,@Controller等这些注解没有写,导致。
- 多线程的情况下事务也会失效。
- 表不支持事务,MySQL5.5之前使用的是MyISAM存储引擎,Myisam不支持事务。
- 使用了try...catch也不支持事务,这种情况事务不会回滚,因为开发者捕获了异常没有抛出。也就是把异常吞掉了。
思维导图
不要在最能吃苦的年纪选择了安逸!!! --- Tornado♥
正文完