74-什么是事务的传播特性及Spring支持的特性有哪些?

1,什么是事务的传播特性?

我们一般都是将事务的边界设置在Service层,

那么当我们调用Service层的一个方法的时,它能够保证我们的这个方法中执行的所有的对数据库的更新操作保持在一个事务中,

在事务层里面调用的这些方法要么全部成功,要么全部失败。那么事务的传播特性也是从这里说起的。

如果你在你的Service层的这个方法中,还调用了本类的其他的Service方法,那么在调用其他的Service方法的时候,这个事务是怎么规定的呢?

必须保证在我方法里调用的这个方法与我本身的方法处在同一个事务中,否则无法保证事物的一致性。

事务的传播特性就是解决这个问题的

2,Spring支持的事务传播特性

在Spring中,针对传播特性的多种配置,我们大多数情况下只用其中的一种:PROPGATION_REQUIRED:

这个配置项的意思是说当我调用service层的方法的时候,开启一个事务,

那么在调用这个service层里面的其他的方法的时候,如果当前方法产生了事务就用当前方法产生的事务,否则就创建一个新的事务。

这个工作是由Spring来帮助我们完成的。

3,Spring支持的事务传播特性

PROPAGATION_REQUIRED:支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。

PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。

PROPAGATION_MANDATORY:支持当前事务,如果当前没有事务,就抛出异常。

PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起

PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。