SpringBoot 中的事务管理讲解

news2024/11/18 3:25:07

Spring Boot 中的事务管理

在实际的开发中,事务是非常重要的一个概念。在 Spring Boot 中,我们可以使用事务管理器来管理事务。事务管理器可以确保一系列操作要么全部成功,要么全部失败,从而保证数据的一致性和完整性。在本文中,我们将介绍 Spring Boot 中的事务是什么,原理,以及如何使用它。

在这里插入图片描述

事务的概念

事务是指一组操作,这些操作要么全部成功,要么全部失败。如果在一组操作中有一个操作失败了,那么整个事务都应该回滚,即撤销已经执行的操作,从而保证数据的一致性和完整性。事务通常具有以下四个特性,即 ACID 特性:

  • Atomicity(原子性):事务的所有操作要么全部成功,要么全部失败。

  • Consistency(一致性):事务执行前后,数据的完整性和一致性保持不变。

  • Isolation(隔离性):事务的执行不受其他事务的干扰,即并发执行的事务之间应该相互隔离。

  • Durability(持久性):事务提交后,它的结果应该永久保存在数据库中。

Spring Boot 中的事务

在 Spring Boot 中,我们可以使用事务管理器来管理事务。事务管理器可以确保一系列操作要么全部成功,要么全部失败,从而保证数据的一致性和完整性。

Spring Boot 中的事务管理器是通过 AOP(面向切面编程)实现的,它可以拦截带有 @Transactional 注解的方法,并在方法执行前后自动开启和提交事务。如果方法执行过程中发生异常,事务管理器会自动回滚事务,从而保证数据的一致性和完整性。

@Transactional 注解

在 Spring Boot 中,我们可以使用 @Transactional 注解来声明一个方法需要进行事务管理。@Transactional 注解有以下几个属性:

  • propagation:事务的传播行为,默认值为 Propagation.REQUIRED。

  • isolation:事务的隔离级别,默认值为 Isolation.DEFAULT。

  • readOnly:事务是否只读,默认值为 false。

  • timeout:事务的超时时间,默认值为 -1(表示不设置超时时间)。

  • rollbackFor:需要回滚的异常类型,默认值为 Exception.class。

  • noRollbackFor:不需要回滚的异常类型,默认值为 {}。

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

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserRepository userRepository;

    @Override
    @Transactional
    public void createUser(User user) {
        userRepository.save(user);
    }

}

在上面的示例中,我们使用了 @Transactional 注解声明了一个方法 createUser(),这个方法用来创建一个用户。如果方法执行过程中发生异常,事务管理器会自动回滚事务,从而保证数据的一致性和完整性。

另外,我们还可以在类上使用 @Transactional 注解来声明一个类中的所有方法都需要进行事务管理。下面是一个示例:

@Service
@Transactional
public class UserServiceImpl implements UserService {

    @Autowired
    private UserRepository userRepository;

    @Override
    public void createUser(User user) {
        userRepository.save(user);
    }

}

在上面的示例中,我们在类上使用了 @Transactional 注解,这个注解会对类中的所有方法都生效。

事务管理器的配置

在 Spring Boot 中,我们可以使用事务管理器来管理事务。事务管理器可以确保一系列操作要么全部成功,要么全部失败,从而保证数据的一致性和完整性。

Spring Boot 中默认使用的是 org.springframework.jdbc.datasource.DataSourceTransactionManager 作为事务管理器。如果你使用的是 JPA,那么默认使用的是 org.springframework.orm.jpa.JpaTransactionManager。如果你使用的是 MyBatis,那么默认使用的是 org.mybatis.spring.SqlSessionTransactionManager。

如果需要自定义事务管理器,我们可以使用 @Bean 注解在配置类中定义一个事务管理器。下面是一个示例:

@Configuration
@EnableTransactionManagement
public class TransactionConfig {

    @Autowired
    private DataSource dataSource;

    @Bean
    public PlatformTransactionManager transactionManager() {
        return new DataSourceTransactionManager(dataSource);
    }

}

在上面的示例中,我们使用 @Bean 注解定义了一个 DataSourceTransactionManager 实例,并将它作为事务管理器返回。另外,我们还使用 @EnableTransactionManagement 注解开启了 Spring Boot 的事务管理功能。

总结

事务是指一组操作,这些操作要么全部成功,要么全部失败。如果在一组操作中有一个操作失败了,那么整个事务都应该回滚,即撤销已经执行的操作,从而保证数据的一致性和完整性。在 Spring Boot 中,我们可以使用事务管理器来管理事务。事务管理器可以确保一系列操作要么全部成功,要么全部失败,从而保证数据的一致性和完整性。Spring Boot 中的事务管理器是通过 AOP 实现的,它可以拦截带有 @Transactional 注解的方法,并在方法执行前后自动开启和提交事务。如果方法执行过程中发生异常,事务管理器会自动回滚事务,从而保证数据的一致性和完整性。如果需要自定义事务管理器,我们可以使用 @Bean 注解在配置类中定义一个事务管理器。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

音频驱动嘴型的视频数字人虚拟主播工具motionface replay使用教程

音频驱动嘴型的视频数字人虚拟主播工具motionface replay使用教程 1:系统要求 软件运行支持32位/64位window 10/11系统,内存最低要求> 8Gb.无其他硬性要求。 1:下载安装 打开百度网盘链接下载: 链接:百度网盘 请输入…

unityhub登录不上,登录界面刷新不出来, 或检测不到Unity

如果是登录界面白屏的话 或 检测不到Unity 可以尝试 1.关闭hub(右下角也要退出,找不到的可以直接任务管理器退出) 2.删除 %UserProfile%\AppData\Roaming 里面的 \UnityHub\Cache和\Unity\Caches 文件夹 C:\Users\Administrator\AppData\Ro…

Linkstech多核并行仿真丨光伏发电系统模型及IEEE 39 bus模型多核并行实测

新能源场站和区域电网作为复杂且具有动态特性的大规模电力系统,需要实时仿真测试来验证其性能、稳定性和响应能力。在这种背景下,多核并行仿真运算显得尤为重要。多核并行仿真能够同时处理电力系统的复杂模型,加速仿真过程,实现接…

C#自定义控件组件实现Chart图表(多Y轴,选择图例加粗,选择放大,缩放,点击查看信息等功能)

先看看ECharts的效果 C# 工具箱里的Chart控件就不演示了,很多效果没办法做出来,做出来效果也很不理想。所以,需要自己去手动实现工具箱里的Chart没办法实现的效果; 先看看实现后的效果 绑定数据 点击图表 点击右侧图例加粗 选择放大 右键 点击缩小,恢复

Docker Desktop使用宿主机Windows的配置文件持久化存储数据

《微软官网Windows 上的 Docker 引擎帮助文档》 以Nginx为例 拉取Nginx镜像 docker pull nginx:1.23.1先启动Nginx,然后把Nginx的配置文件复制到Windows docker run --namenginx-1.23.1 -d -p 80:80 nginx:1.23.1把Nginx的配置文件复制到Windows 注意&#xff1…

【算法训练-数组 四】【合并】:合并两个有序数组

废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是【数组合并】,使用【数组】这个基本的数据结构来实现,这个高频题的站点是:CodeTop,筛选条件为&…

【深度学习】分类损失函数解析

【深度学习】分类相关的损失解析 文章目录 【深度学习】分类相关的损失解析1. 介绍2. 解析3. 代码示例 1. 介绍 在分类任务中,我们通常使用各种损失函数来衡量模型输出与真实标签之间的差异。有时候搞不清楚用什么,下面是几种常见的分类相关损失函数及其…

计算机网络TCP篇之流量控制

计算机网络TCP篇之流量控制 今天谈一谈我对于tcp流量控制的看法 在网络拓扑中如果发送方节点的发送速率大于接受方节点的接受速率,数据会不断在接受方的缓冲区累积,直到接受方的缓冲区满的时候,发送方继续发送数据,这时候接受方无…

redisson使用过程常见问题汇总

文章目录 常见报错1. 配置方式使用错误2. 版本差异报错3. 配置文件中配置了密码或者配置错误4. 字符集和序列化方式配置问题5. Redisson的序列化问题6. 连接池问题:7. Redisson的高可用性问题:8. Redisson的并发问题9. Redisson的性能问题 2. 参考文档 常…

springboot第36集:kafka,JSAPI支付,nginx,微服务Feign与flutter安卓App开发2

去思考自己的项目有哪些让你觉得不好的地方,然后去解决它,而非学习了一堆原理,展示技术能力比展示技术知识更有说服力 其实边解决问题边记录,是一个好习惯,不仅可以在解决问题的时候,方便回顾和查找&#x…

使用webpack-bundle-analyzer分析uni-app 的微信小程序包大小(HbuilderX运行)

1、找到vue.config.js 文件。如果找不到,则在项目根目录下(跟pages.json同一个目录下)创建一个JS文件,命名为vue.config.js 2、安装webpack-bundle-analyzer,官方网站:https://github.com/webpack-contrib…

中国汽车工业协会软件分会中国汽车基础软件生态标委会第三届二次会议在天津顺利召开

2023年8月30日,中国汽车工业协会软件分会中国汽车基础软件生态标委会(AUTOSEMO)第三届二次会议在天津召开。出席本次会议的有AUTOSEMO专业指导主任许艳华、中国汽车工业协会软件分会理事长、AUTOSEMO轮值主席、中汽创智CEO李丰军、经纬恒润协…

ChatGPT AIGC总结Excel中Vlookup,lookup,xlookup的区别

在Excel的使用过程中,查找函数是非常重要的,如Vlookup,lookup,Xlookup,index+match等都是使用的最多的函数,我们让ChatGPT,AIGC用思维导图来总结一下,各查找函数的用法与区别。 AIGC ChatGPT ,BI商业智能, 可视化Tableau, PowerBI, FineReport, 数据库Mysql Oracle…

[网鼎杯 2020 朱雀组]phpweb call_user_func()

时间一跳一跳的 抓个包 很奇怪 结合上面的 date() 认为第一个是函数 我们随便输一个看看 发现过滤了 随便输一个 linux指令 发现报错了 call_user_func() 看看是啥 很容易理解 第一个参数是函数名 后面是 参数 那么这里就是 func 函数 p 数值 所以我们看看有什么办法可以…

毕业设计-基于微信小程序的智能垃圾分类回收系统

博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 1 简介 视频演示地址: 基于微信小程序的智能垃圾分类回收系统,可作为毕业设计 小…

易优cms小程序插件升级到2.1版本

eyou小程序升级到2.1,主要新增一键获取手机号,统一返回格式等 升级内容: (1)对全部接口的返回格式做统一化设置 (2)新增一键获取手机号功能 (3)新增footprint足迹接口 &…

Win10 屏蔽键盘按键

有时候键盘进水一直触发或者经常误触某个按键,非常影响体验,Win10是支持直接屏蔽按键的 创建注册表 WinR 快捷键输入regedit 打开注册表进入到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout空白处右击新建一个二进制值名为Scan…

机器人制作开源方案 | 桌面级全向底盘--机器视觉

机器视觉是人工智能正在快速发展的一个分支,简单说来机器视觉就是用机器代替人眼来做测量和判断。机器视觉系统是通过机器视觉产品(即图像摄取装置,分CMOS和CCD两种)将被摄取目标转换成图像信号,传送给专用的图像处理系…

刷新单年发射纪录:SpaceX成功发射62次猎鹰9号火箭

SpaceX一直都致力于推进航天领域的发展。近日,该公司的猎鹰9号火箭再次刷新了单年发射纪录,目前已经成功发射了62次。除此之外,今年SpaceX还发射了一枚猎鹰火箭和一枚巨型火箭。马斯克表示,他的目标是实现每月10次猎鹰飞行&#x…

1800亿参数,支持中文,3.5万亿训练数据!开源类ChatGPT模型

这个必须推荐一下:1800亿参数,支持中文,3.5万亿训练数据!开源类ChatGPT模型 阿联酋阿布扎比技术创新研究所(Technology Innovation Institute,简称TII)在官网发布了,目前性能最强的…