事务的传播特性
REQUIRED:这种事务会依赖于调用它的外部事务,如果外部事物出现异常,如果没有被捕获,事务也会回滚,被捕获不会回滚。如果没有外部事物则运行在自己的事务内。
REQUIRES_NEW:这种事务完全和外界隔离,外部事物不会影响到当前事务。如果外部事务出现异常,该事务同样会执行不会回滚。但是如果该方法出现异常,会导致同一外部事物的REQUIRED级别的事务回滚(因此不算是完全隔离吧)。
SUPPORTS:如果有事务调用该级别的事务,那么该方法就会运行在外部事务当中。如果没有外部事物,否则他不会有事务。
NOT_SUPPORTS:当前方法不会应用在事务当中,如果有外部事务,将外部事物挂起。
MANDATORY:当前方法必须运行在事务内部否则抛出异常。
NEVER:当前方法不能运行在事务内部否则抛出异常。
NESTED:和REQUIRED的区别在于即使外部事务出现被捕获的异常依然会进行回滚。
注:上述效果都是在外部类调用的话是使用AOP,但是在类内调用的话只是最普通的调用不会走AOP