Spring事务的传播机制使用及说明

 更新时间:2025年11月22日 12:09:31   作者:光依旧  
本文介绍了Spring事务的传播机制,包括事务的传播行为、传播级别以及如何在方法中使用这些传播级别,通过一个例子说明了不同传播级别的效果

spring事务的传播机制

1、spring事务

指封装在数据库事务之上的一种事务处理机制。其管理方法有两种,分别是编程式事务以及声明式事务。

一般我们使用@Transactional进行声明式事务。

2、Spring事务的传播机制

事务的传播,是指一个方法调用另一个方法并将事务传递给它。

事务的转播机制主要针对被调用者而言,控制它是否被传播或者被怎样传播。

spring事务的传播机制有七种

传播行为描述
PROPAGATION_REQUIRED默认的Spring事物传播级别,若当前存在事务,则加入该事务,若不存在事务,则新建一个事务
PROPAGATION_REQUIRE_NEW若当前没有事务,则新建一个事务。若当前存在事务,则新建 一个事务,新老事务相互独立。外部事务抛出异常回滚不会影响内部事务的正常提交
PROPAGATION_NESTED如果当前存在事务,则嵌套在当前事务中执行。如果当前没有事务, 则新建一个事务,类似于REQUIRE_NEW
PROPAGATION_SUPPORTS支持当前事务,若当前不存在事务,以非事务的方式执行
PROPAGATION_NOT_SUPPORTED以非事务的方式执行,若当前存在事务,则把当前事务挂起
PROPAGATION_MANDATORY强制事务执行,若当前不存在事务,则抛出异常
PROPAGATION_NEVER以非事务的方式执行,如果当前存在事务,则抛出异常

传播级别一般不需要定义,默认就是PROPAGATION_REQUIRED,除非在嵌套事务的情况。

上述描述表格的描述还是比较抽象,下面我们使用一个例子来说明这个传播机制。

假定方法A调用方法B

方法B定义的事务类型A方法有事务时A方法无事务
 @Transactional(propagation = Propagation.REQUIRED)    B和A事务合并成一个事务B新建一个事务
 @Transactional(propagation = Propagation.REQUIRES_NEW)  B新建一个事务,和A事务无关,互不影响B新建一个事务
 @Transactional(propagation = Propagation.NESTED)  B新建一个A的子事务,A异常影响B,B异常不影响AB新建一个事务
 @Transactional(propagation = Propagation.SUPPORTS)  B加入到A事务中B无事务
 @Transactional(propagation = Propagation.NOT_SUPPORTED)  挂起A事务,B以无事务方式执行B无事务
 @Transactional(propagation = Propagation.MANDATORY)  B加入到A事务中B抛异常
 @Transactional(propagation = Propagation.NEVER)  B抛异常B无事务

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java使用Freemarker页面静态化生成的实现

    Java使用Freemarker页面静态化生成的实现

    这篇文章主要介绍了Java使用Freemarker页面静态化生成的实现,页面静态化是将原来的动态网页改为通过静态化技术生成的静态网页,FreeMarker 是一个用 Java 语言编写的模板引擎,它基于模板来生成文本输,更多相关内容需要的小伙伴可以参考一下
    2022-06-06
  • idea中一键自动生成序列化serialVersionUID方式

    idea中一键自动生成序列化serialVersionUID方式

    这篇文章主要介绍了idea中一键自动生成序列化serialVersionUID方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • java使用枚举封装错误码及错误信息详解

    java使用枚举封装错误码及错误信息详解

    这篇文章主要介绍了java使用枚举封装错误码及错误信息,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • JWT登录认证Springboot详解

    JWT登录认证Springboot详解

    文章主要介绍了如何在Java项目中使用JWT进行用户认证和授权,通过定义一个常量,编写JWT工具类来生成和解析token,登录时在服务端生成token并返回给客户端,客户端使用拦截器拦截请求,验证token的有效性,从而实现权限控制,文章旨在分享个人经验,为开发者提供参考
    2024-11-11
  • java如何测试网络连通性

    java如何测试网络连通性

    这篇文章主要为大家详细介绍了java测试网络连通性的两种方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • Java中Stream流去除List重复元素的方法

    Java中Stream流去除List重复元素的方法

    这篇文章主要为大家详细介绍了Java中Stream流去除List重复元素的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • JavaMe开发绘制文本框TextEdit

    JavaMe开发绘制文本框TextEdit

    在JavaMe连载(3)-也说MVC设计模式 一文中提到了一个TextEdit类,但没有给出具体实现,TextEdit是采用GameCanvas绘制的文本编辑器。本文结合实例给出实现的方法。
    2015-09-09
  • Java操作集合工具类Collections使用详解

    Java操作集合工具类Collections使用详解

    这篇文章主要介绍了java操作集合工具类Collections使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-12-12
  • SpringMVC中@RequestMapping注解的实现

    SpringMVC中@RequestMapping注解的实现

    RequestMapping是一个用来处理请求地址映射的注解,本文主要介绍了SpringMVC中@RequestMapping注解的实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • Spring MVC和springboot静态资源处理问题

    Spring MVC和springboot静态资源处理问题

    这篇文章主要介绍了Spring MVC和springboot静态资源处理问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08

最新评论