1.spring事务的传播
-
为什么会有传播机制
-
spring对事务的控制,是使用aop切面实现的
-
场景一:A调用B,都有事务,B异常,让B提交还是两个一起回滚
-
场景二:A调用B,A有事务,是够让B加入事务控制,B异常,A是否回滚
-
场景三:A调用B,都有事务,B执行完成,A有异常,B是否回滚
-
-
传播机制的生效条件
-
由于spring是使用aop来代理事务控制的,是针对于接口或类的,所以在同一个service类中两个方法调用,传播机制是不生效的
-
-
事务传播的类型
-
REQUIRED(默认)
-
支持当前事务,如果当前没有事务,则新建事务
-
如果当前存在事务,则加入当前事务,合并成一个事务
-
子事务回滚,父事务一定回滚;父事务回滚,子事务一定回滚
-
-
REQUIRES_NEW
-
新建事务,如果当前存在事务,则把当前事务挂起
-
这个方法会独立提交事务,不受调用者的事务影响,父级异常,它也会正常提交
-
-
NESTED
-
如果当前存在事务,它将会成为父级事务的一个子事务,方法结束后并没有提交,只有等父事务结束才提交
-
如果当前没有事务,则新建事务
-
如果它异常,父级可以捕获它的异常而不进行回滚,正常提交
-
但如果父级异常,它必然回滚,这就是和REQUIRES_NEW的区别
-
-
NOT_SUPPORTED
-
以非事务方式运行
-
如果当前存在事务,则把当前事务挂起
-
-
MANDATORY
-
如果当前存在事务,则运行在当前事务中
-
如果当前无事务,则抛出异常,即父级方法必须要有事务
-
-
NEVER
-
以非事务方式运行,如果当前存在事务,则抛出异常,即父级方法必须无事务
-
-