@Transactional的正确使用之事务传播行为的解疑

传送门:https://blog.csdn.net/nbl_yc/article/details/104019732 事务方法之间的调用,回滚问题

前提:事务的传播行为用在事务与事务之间

 

举例:前提:abc都具有事务,ac的传播模式为默认的required,有一步出错,该方法下面的方法就不会再执行了

          @Transactional

         public void mainTransaction(){

                a();

                b();

                c();

        }

 

情况一:

          如果a,b,c的传播方式是required(自己内部的传播模式),那么abc属于绑定的状态,一个出错,全部回滚

情况二:

         如果ac的传播模式是required,b的传播模式是requiredNew,那么b异常,ab都会回滚;c要是异常,a会回滚,b因为开启了自己的事务,已经执行到数据库了,不会再回滚

 

总结:required是大家绑定到一块,之间互相影响。requiredNew是自己会影响到别人,但是别人出错,不会影响到自己

你可能感兴趣的:(JAVA)