Spring @Transactional说明

@Transactional注解生效的几种情况

  1. 当在一个@Transactional方法中调用没有@Transactional的方法时,调用者的事务会持续到被调用的方法中;调用者和被调用者都使用同一个连接,调用方法中的任何异常都将触发@Transactional配置的事务回滚。

  2. 当同一个实例中的@Transactional方法调用另一个@Transactional方法时,被调用者的@Transactional对事务没有任何影响。但是当两个方法不再同一个实例中时,被调用者的@Transactional将根据配置生效。

  3. Spring的声明式事务使用AOP代理,AOP代理只有在方法从实例外部被调用的时候才会被激活,所以在同一个类的方法之间调用中,如果A方法调用了B方法,不管A方法有没有开启事务, B方法的事务是无效的。

  4. @Trasactional只能加在public修饰的方法上事务才起效。如果加在protect、private等非public修饰的方法上,事务将失效。