事务传播性,事务方法之间调用的时候,事务的传播方式。
1、REQUIRED(required)
这里假设调用者是A,被调用者是B
默认的传播属性,如果A 有事务,加入A的事务,如果没有事务创建一个自己的事务回滚也就自己回滚;
2、REQUIRED_NEW
创建一个新的事务,如果当前存在事务则把当前事务挂起,不管外部是否有事务都开启自己的事务,外面回滚里面作为独立事务不用回滚,里面回滚异常未处理的话外部也回滚。
与REQUIRED的本质区别在于,可能存在两个事务,外部事务被挂起;
3、NESTED(nested)
如果当前存在事务,创建一个事务作为当前事务的嵌套事务来运行,如果没有事务,则该取值等价于REQUIRED;
主事务回滚,子事务一起回滚,子事务可以单独回滚不影响主事务(异常处理不被外部感知到的情况);
4、MANDATORY(mandatory)
如果当前存在事务,加入事务,如果不存在事务抛出异常;
5、SUPPORTS
如果当前存在事务,加入事务,没有事务则已非事务的形式运行;
6、NOT_SUPPORTS
如果当前存在事务则挂起事务,自己肯定以非事务方式运行;内部肯定是不回滚的,外部是否回滚取决于内部事务异常是否被处理;
7、NEVER
以非事务方式运行,有事务则抛出异常。