Spring Boot 中的事务回滚规则

Spring Boot 中的事务回滚规则

在应用程序中,事务管理是一个重要的概念。事务是指一系列的操作,这些操作要么全部成功,要么全部失败。在Spring Boot中,我们可以使用事务管理器来管理事务。在使用事务管理器的时候,一个非常重要的概念就是事务回滚。

在这里插入图片描述

什么是事务回滚

事务回滚是指当事务执行失败时,将所有已经执行的操作全部撤销,使它们回到事务开始时的状态。这样可以保证数据的一致性和完整性。在Spring Boot中,事务回滚是由Spring框架来实现的。

Spring Boot 中的事务回滚规则

Spring Boot默认情况下,只有在抛出RuntimeException或Error时,才会发生事务回滚。这是因为RuntimeException和Error通常是由Java虚拟机抛出的,它们是无法被捕获的异常,因此Spring无法对它们进行处理,只能回滚事务。

在Spring Boot中,我们可以使用@Transactional注解来控制事务的回滚。这个注解可以放在方法上,也可以放在类上。如果它放在类上,那么所有的方法都将继承这个注解。

@Transactional注解有一些非常重要的属性,包括rollbackFornoRollbackForrollbackFor用来指定哪些异常会触发事务回滚,noRollbackFor用来指定哪些异常不会触发事务回滚。

@Transactional(rollbackFor = Exception.class, noRollbackFor = RuntimeException.class)
public void doSomething() {// ...
}

在上面的代码中,rollbackFor属性指定了所有的异常都会触发事务回滚,而noRollbackFor属性指定了RuntimeException和其子类的异常不会触发事务回滚。

另外,Spring Boot还提供了一个@Transactional(propagation = Propagation.REQUIRED)注解,用来控制事务的传播行为。这个注解有很多属性,其中最常用的是Propagation.REQUIRED。它表示如果当前已经存在一个事务,那么就使用这个事务;如果当前不存在事务,那么就创建一个新的事务。

Spring Boot 中的事务原理

在Spring Boot中,事务是由Spring框架来管理的。Spring框架使用了AOP(面向切面编程)技术来实现事务的管理。具体来说,Spring框架通过代理机制来实现事务的管理。

当一个方法被@Transactional注解修饰时,Spring会为这个方法创建一个代理对象。当这个方法被调用时,实际上是调用了代理对象的方法。代理对象在方法执行前会开启一个事务,在方法执行后根据执行结果来决定是提交事务还是回滚事务。

Spring框架使用了一个TransactionInterceptor拦截器来实现事务管理。这个拦截器会在方法执行前后进行拦截,并根据事务的传播行为和异常情况来决定是开启一个新的事务还是使用已经存在的事务,并在方法执行后根据执行结果来决定是提交事务还是回滚事务。

Spring Boot 中的事务使用

在Spring Boot中,我们可以使用@Transactional注解来控制事务的回滚。在使用@Transactional注解时,需要注意以下几点:

  1. @Transactional注解只能放在public方法上。
  2. 方法必须是非静态的。
  3. 如果在同一个类中调用了带有@Transactional注解的方法,那么事务将不会起作用。这是因为Spring是通过代理来实现事务管理的,而代理只能在方法调用时生效。
  4. 如果在一个类中同时存在多个带有@Transactional注解的方法,那么这些方法将共享同一个事务。
  5. 在使用@Transactional注解时,一定要确保注解配置正确,否则可能会导致事务无法回滚或者回滚不完全的情况。

下面是一个使用@Transactional注解的例子:

@Service
public class UserService {@Autowiredprivate UserRepository userRepository;@Transactional(rollbackFor = Exception.class)public void addUser(User user) {userRepository.save(user);// ...}}

在上面的例子中,addUser()方法使用了@Transactional注解来控制事务的回滚。如果在方法执行过程中发生了异常,那么事务将会回滚,保证数据的一致性和完整性。

除了使用@Transactional注解外,Spring Boot还提供了一些其他的方式来管理事务,包括编程式事务管理和声明式事务管理。这些方式的具体实现可以参考Spring Boot官方文档。

总结

事务回滚是保证数据的一致性和完整性的重要手段。在Spring Boot中,事务回滚是由Spring框架来实现的。Spring框架使用了AOP技术来实现事务的管理,通过代理对象来控制事务的回滚。在使用事务时,我们可以使用@Transactional注解来控制事务的回滚,同时也需要注意注解的配置和使用方式。除了使用@Transactional注解外,Spring Boot还提供了其他的方式来管理事务,开发者可以根据具体情况选择最适合自己的方式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/188.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Oracle】springboot连接Oracle 集成mybatis、druid

目录 项目结构与库表数据pom.xmlapplication.yml实体类Mappercontroller接口测试 基于spring-boot 2.7.11,连接Oracle 11g 仅做一个简单的示例 特别说明(不一定正确,还请指正):我Oracle也不熟,但据我观察发…

Grafana任意文件读取漏洞(CVE-2021-43798)

Grafana任意文件读取漏洞(CVE-2021-43798) 一、漏洞描述 Grafana是一个跨平台、开源的数据可视化网络应用程序平台。用户配置连接的数据源之后,Grafana可以在网络浏览器里显示数据图表和警告。 二、漏洞影响范围 影响版本: Gr…

【资料分享】全志科技T507-H评估板规格书(4核ARM Cortex-A53,主频1.416GHz)

1 评估板简介 创龙科技TLT507-EVM是一款基于全志科技T507-H处理器设计的4核ARM Cortex-A53国产工业评估板,主频高达1.416GHz,由核心板和评估底板组成。核心板CPU、ROM、RAM、电源、晶振等所有器件均采用国产工业级方案,国产化率100%。同时&a…

ElasticSearch 8.0+ 版本Windows系统启动

下载地址:https://www.elastic.co/cn/downloads/past-releases/winlogbeat-8-8-1 解压\elasticsearch\elasticsearch-8.5.1 进入bin目录,启动elasticsearch.bat 问题1: warning: ignoring JAVA_HOMED:\jdk1.8.0_271; using bundled JDK J…

FlutterUnit 已上架 iOS,暗色模式全面支持

theme: cyanosis 一、FlutterUnit 的全平台支持 FlutterUnit 是我的一个开源项目,基于 Flutter 构建的一个 全平台 应用程序。现在很荣幸地宣布: FlutterUnit 已经上架 iOS 的 App Store ,自此主流的几大平台均已提供体验。 项目地址: https://github.co…

普通人如何居家办公实现网上赚钱?分享五种互联网赚钱的副业项目

科思创业汇 大家好,这里是科思创业汇,一个轻资产创业孵化平台。赚钱的方式有很多种,我希望在科思创业汇能够给你带来最快乐的那一种! 网上赚钱,主要是利用各种信息差异从网上获取收入。 近年来,随着互联网…

分布式存储Ceph的部署及应用(创建MDS、RBD、RGW 接口)

系列文章目录 文章目录 系列文章目录一、1.存储基础2. 单机存储的问题3. 分布式存储(软件定义的存储 SDS) 二 Ceph1.Ceph 简介2. Ceph 数据的存储过程 总结 一、 1.存储基础 1.1 单机存储设备 ●DAS(直接附加存储,是直接接到计算…

【Linux】文件基础IO操作:C语言接口 | 系统调用接口 | 重定向

重修C语言文件知识Linux文件知识标记位传参文件的系统调用理解什么是文件文件fd的分配规则重定向C语言文件层面的缓冲区知识 重修C语言文件知识 打开文件操作fopen函数&#xff1a; 我们看一段代码&#xff0c;以写(w)的形式来打开文件&#xff1a; #include <stdio.h>…

在Mac上安装Aspectj1.9.8(用于Java17)+IDEA

1. 确定所使用的Java版本和AspectJ的对应关系 2. 下载AspectJ包 3. 安装AspectJ 4. 添加AspectJ对应的环境变量 5. AspectJ测试-简单终端测试 6. AspectJ测试-通过IDEA敲代码测试 ---------------------------------------详细教程-------------------------------------…

css基础(二)

目录 1. CSS 的复合选择器 1.1 什么是复合选择器 1.2 后代选择器(重要&#xff09; 1.3 子选择器(重要&#xff09; 1.4 并集选择器(重要&#xff09; 1.5 伪类选择器 1.6 链接伪类选择器 1.7 :focus伪类选择器 1.8 复合选择器总结 二、 CSS 的元素显示模式 2.1什么是元素显示模…

组合逻辑电路设计---多路选择器

目录 1、多路选择器简介 2、硬件设计 3、实验任务 4、程序设计 4.1、模块设计 4.2、绘制波形图 4.3、编写代码 &#xff08;1&#xff09;assign 中条件运算符&#xff08;三目运算符&#xff09;实现方法&#xff1a; &#xff08;2&#xff09;always 语句块中使用 …

微信小程序editor富文本编辑器 有关图片的属性

微信小程序editor富文本编辑器 有关图片的属性 属性类型默认值必填说明show-img-sizebooleanfalse否点击图片时显示图片大小控件show-img-toolbarbooleanfalse否点击图片时显示工具栏控件show-img-resizebooleanfalse否点击图片时显示修改尺寸控件 详细请看&#xff1a;edito…