spring 事务的传播行为 详细介绍
时间: 2023-10-29 19:52:13 浏览: 37
Spring的事务管理模块为我们提供了很多的事务传播行为,用来控制在不同的方法调用之间事务的传播方式,以及如何处理嵌套事务。下面我来详细介绍一下Spring的事务传播行为。
Spring 的事务传播行为分为以下 7 种:
- PROPAGATION_REQUIRED (默认值):如果当前没有事务,就新建一个事务;如果已经存在一个事务中,加入该事务;该选项是最常用的选项。
- PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。
- PROPAGATION_MANDATORY:使用当前的事务,如果当前没有事务,就抛出异常。
- PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起。
- PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
- PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
- PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。
除了PROPAGATION_REQUIRED和PROPAGATION_REQUIRES_NEW之外,其它的传播行为都是相对简单的,下面我重点介绍一下PROPAGATION_REQUIRED和PROPAGATION_REQUIRES_NEW的区别。
PROPAGATION_REQUIRED:当前方法调用需要事务,如果当前没有事务,就新建一个事务。如果存在一个事务中,加入该事务,成为一个整体。这是最常用的传播行为。
PROPAGATION_REQUIRES_NEW:当前方法必须开启新的事务,并在自己的事务内运行。如果当前存在事务,则挂起该事务。使用PROPAGATION_REQUIRES_NEW时,将会创建一个新的事务,如果新的事务执行成功,则提交该事务;如果新的事务执行失败,则回滚该事务。在PROPAGATION_REQUIRES_NEW的事务中,可以使用savepoint来进行部分回滚。
总之,Spring的事务传播行为为我们提供了很多的灵活性,可以根据实际情况来选择不同的传播行为,以达到最佳的事务管理效果。