@Transactional 注意事项、方法调用

1.同一个类中,即A与B在同一类中,A()调用B()方法,A不加 @Transactional 事务注解,B加 @Transactional 事务注解,则B中的事务不起作用,A加事务,才会起作用,B中若将异常捕获,事务也不起作用

 

@Transactional //A加事务才会起作用
public void A(){
   B();
}
--------------------------------

@Transactional //B加不加事务无影响
public void B(){
  try{
   throw new Exception();
}catch(Exception e){//B中将异常铺货未能抛出到A中,事务也不起作用
}
}

 

 

 

2.不同类中,即A在A类中,B在B类中,A调用B,A与B事务独立,此时A不加事务B加事务,B中事务可生效,则可将需要加事务的代码块抽取出放入其他类的方法中加事务来实现部分代码事务回滚

public void A(){
  abcabc;
  try{
     B();
    }catch(Exception e){
    }
  defdef;//B中发生异常事务回滚,不影响方法A
}

--------------------------------

@Transactional 
public void B(){
  throw new Exception();
}

 

3.@Transactional(rollbackFor=Exception.class) 可回滚非RuntimeException的事务

4.@Transactional 注解只能应用到 public 可见度的方法上

 

讲的比较透彻全面的一篇文章:https://www.ibm.com/developerworks/cn/java/j-master-spring-transactional-use/index.html

 

PROPAGATION_REQUIRES_NEW 和 PROPAGATION_NESTED区别:https://blog.csdn.net/u011285162/article/details/19247711

posted @ 2020-03-08 23:57  涂山倩倩  阅读(4000)  评论(0编辑  收藏  举报