Spring事务传播机制理解
REQUIRED:如果当前没有事务,则自己新建一个事务,如果当前存在事务,则加入这个事务。
REQUIRES_NEW:主事务和里面的事务独。
SUPPORTS:当前存在事务,则加入当前事务,如果当前没有事务,就以非事务方法执行。
NOT_SUPPORTED:不论当前是否存在事务,都会以非事务的方式运行。
MANDATORY:当前存在事务,则加入当前事务,如果当前事务不存在,则抛出异常。
NEVER:不使用事务,如果当前事务存在,则抛出异常。
NESTED:如果当前事务存在,则在嵌套事务中执行,否则REQUIRED的操作一样(开启一个事务)
NESTED和REQUIRED的区别
REQUIRED情况下,调用方存在事务时,则被调用方和调用方使用同一事务,那么被调用方出现异常时,由于共用一个事务,所以无论调用方是否catch其异常,事务都会回滚
而在NESTED情况下,被调用方发生异常时,调用方可以catch其异常,这样只有子事务回滚,父事务不受影响