spring事务的传播

1.PROPAGATION_REQUIRED //由于REQUIRED方式是如果有一个事务,则加入事务中,如果没有,则新建一个事务,也就是说方法1一开始就会创建一个事务,而方法2发现有事务存在则会加入到事务中,方法2抛出运行时异常,整个事务将会回滚。如果方法2抛出的是可捕获异常,事务将不起作用,方法1执行成功插入,方法2异常中断。或者我们将方法2设置rollback-for属性,那么在指定的异常之内事务都将回滚

2.PROPAGATION_NEVER //方法1的事务传播机制为REQUIRED,方法2的事务传播机制为NEVER,由于方法1会创建一个事务,而方法2是NEVER,不应该在事务中运行,因此导致了冲突会报错。Existingtransaction found for transaction marked with propagation ‘never’

3.PROPAGATION_MANDATORY //运行机制和1一样

4.PROPAGATION_NESTED – 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。

5.PROPAGATION_SUPPORTS – //支持当前事务,如果当前没有事务,就以非事务方式执行。方法A没有事务,调用方法B,方法B是SUPPORTS ,若方法B报错,则方法B不会回滚

6.PROPAGATION_NOT_SUPPORTED //方法1的事务传播机制为REQUIRED,方法2的事务传播机制为NOT_SUPPORTED,由于方法2事务特性,方法1的事务将会被挂起,方法2抛出运行时异常,但是方法2是不在事务环境中运行的,所以回滚不了,而方法1中未捕获此异常,将进行事务回滚,如果方法2抛出的是运行异常,即使方法1没有捕获此异常,也将被忽略,不进行事务的回滚

7.PROPAGATION_REQUIRES_NEW – 新建事务,如果当前存在事务,把当前事务挂起。

猜你喜欢

转载自blog.csdn.net/liu_yang1314/article/details/84103980