码迷,mamicode.com
首页 > 其他好文 > 详细

@Transactional的使用与失效

时间:2021-05-24 12:19:30      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:法则   inno   方法调用   public   strong   exce   事务   ack   l数据库   

@Transactinonal
  • 注解在方法抛出RuntimeException类及其子类时、Error类及其子类时会回滚当前事务,使sql不提交;
  • 只能作用于public的方法;写在类上时,代表给该类中所用public方法加@Transactinonal注解;写在方法上时,只给当前public方法加@Transactinonal注解(当类和方法上均有@Transactinonal时,方法的事务会覆盖类的事务)
  • 什么情况下失效:
    • @Transactinonal作用在非public方法上(源码中如果不是public方法则不会获取@Transactinonal的配置信息)
    • @Transactinonal的propagation配置为PROPAGATION_SUPPORTS、PROPAGATION_NOT_SUPPORTS、PROPAGATION_NEVER时事务不起效
    • @Transactinonal的rollbackFor没有配置想要回滚的异常抛出类型,因为@Transactinonal只回滚RuntimeException类及其子类时、Error类及其子类
    • @Transactinonal注解的funB()方法被同一类中的funA()方法调用,funB()不会回滚,因为spring源码的Spring AOP代理决定只有被当前类以外的方法调用才可以回滚
    • @Transactional注解修饰的方法中的异常被catch住并没有被抛出来
    • 如果用mysql数据库:innodb引擎支持事务;myisam引擎不支持事务
 

@Transactional的使用与失效

标签:法则   inno   方法调用   public   strong   exce   事务   ack   l数据库   

原文地址:https://www.cnblogs.com/afei1759/p/14773239.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!