- 注解在方法抛出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的使用与失效
@Transactinonal