@Transactional 注意事项方法调用

Posted qianabby

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了@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

以上是关于@Transactional 注意事项方法调用的主要内容,如果未能解决你的问题,请参考以下文章

springboot~Transactional注解的注意事项

@Transactional 方法调用另一个没有@Transactional 注释的方法?

玩转Spring--消失的事务@Transactional

Transactional ejb 事务陷阱

SpringBoot设置 @Transactional ,并在异常处理中调用setRollbackOnly()事务不回滚

Service调用其他Service的private方法, @Transactional会生效吗(上)