【Spring事务的介绍2——事务的传播机制】

Spring事务的传播特性

什么是事务的传播特性?

事务的传播特性就是当一个事务方法被另外一个事务的方法调用时,这个事务该怎么处理!

Spring总共给出了7中事务的隔离级别:

可以分为三种类型 不要事物的 、 可有可无的 、 必须有事务的

不要事物的:

1.PROPAGATION_NEVER: 没有就非事务执行,如果有事务就抛异常

2.PROPAGATION_NOT_SUPPORTED: 没有就非事务执行,有就直接见事务挂起,然后非事务执行


可有可无的

3.PROPAGATION_SUPPORTED: 有事务就加入当前事务,没事务就非事物执行


必须有事务的

4.PROPAGATION_REQUIRES_NEW: 不管有没有事务都会创建一个新的事务。如果有就将原来的事务挂起,使用自己的事务。

5.PROPAGATION_NESTED: 不管有没有事务都会创建一个新的事务,如果有事务,就在当前事务中嵌套一个新的事物

6.PROPAGATION_REQUIRED: 默认事务类型,如果没有就新建一个事务;如果有,就加入当前事务。(大多数情况都是用这种)

7.PROPAGATION_MANDATORY: 如果没有事务就报错,如果有事务就加入当前事务。


注意:在这7种事物隔离级别中存在一些将原事物挂起的类型,如果使用的是将原事物挂起的隔离级别会出现的问题

假设A方法有事务对user表的一条数据进行操作,操作完过后调用B方法。
B方法也有事务,B方法的逻辑和A方法的一样对user表操作同一条数据,假设事务的隔离类型是 NOT_SUPPORTED:就会出现死锁的情况。
因为A方法调用B方法的时候 B方法把A方法的事物挂起。导致user表锁起来了。所以B方法对user表就操作不了,所以产生死锁

猜你喜欢

转载自blog.csdn.net/weixin_43249535/article/details/123733835