欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > Spring的事务传播

Spring的事务传播

2025/2/22 2:31:13 来源:https://blog.csdn.net/thehateyou/article/details/145752648  浏览:    关键词:Spring的事务传播

        Spring框架提供了一套丰富的事务管理功能,允许开发者通过声明式事务管理来处理事务。事务传播行为定义了客户端和被调用方法之间的事务边界。

下面是对于Spring支持的事务传播行为的说明:

1. 事务传播行为的定义

事务传播行为是指,当一个事务方法被另一个事务方法调用时,事务应该如何传播。Spring定义了以下七种事务传播行为:

2. 七种事务传播行为

2.1 REQUIRED

描述:

如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。


使用场景:

通常是业务方法需要在一个事务中运行。

2.2 SUPPORTS

描述:

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


使用场景:

适用于那些可以运行在事务中,也可以不运行在事务中的方法。

2.3 MANDATORY

描述:

使用当前的事务,如果当前没有事务,就抛出异常。


使用场景:

适用于那些必须在事务中执行的方法,否则就失败。

2.4 REQUIRES_NEW

描述:

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


使用场景:

适用于需要独立事务的方法,例如,一个事务中的操作需要被记录到日志中,而日志操作需要单独的事务。

2.5 NOT_SUPPORTED

描述:

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


使用场景:

适用于那些不应该在事务中执行的操作,例如,一些不需要事务支持的查询操作。

2.6 NEVER

描述:

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


使用场景:

适用于那些绝对不能在事务中执行的方法。

2.7 NESTED

描述:

如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与REQUIRED类似的操作。


使用场景:

适用于需要在现有事务中创建一个嵌套事务的方法,这个嵌套事务可以独立于外部事务进行提交或回滚。

3. 事务传播行为的使用

在Spring中,可以通过@Transactional注解来指定事务传播行为,如下所示:
 

@Transactional(propagation = Propagation.REQUIRED)
public void doWork() {// 业务逻辑
}

4. 注意事项

事务传播行为只适用于public方法,如果标记在非public方法上,Spring不会报错,但是事务设置不会起作用。

NESTED事务传播行为需要JDBC 3.0及以上驱动和JTA事务管理器的支持,并不是所有数据库都支持嵌套事务。


        通过合理配置事务传播行为,可以确保业务方法在正确的上下文中执行,从而保证数据的一致性和完整性。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词