【事务注解✈️✈️】@Transactional注解在不同参数配置下的功能实现

目录

前言

使用场景

         1.单个方法层面

         2.类级别使用

         3.指定异常回滚

         4.跨方法调用事务管理

         5.只读事务

​         6.设置超时时间,超时则自动回滚

         7.隔离级别设置

章末


前言

        小伙伴们大家好,ACID(原子性,一致性,隔离性,持久性)特性相比大家都很熟悉,每种的实现方式也都不同,原子性的要求是指一个操作要么全部执行成功,要么全部失败回滚,不会存在部分成功或者失败的情况,意味着在一个事务中的操作要么全部生效,要么全部取消以此保证数据的一致性和完整性。在SpringBoot 项目中就有@Transactional事务注解,并且可以支持各种场景的使用

使用场景

        1.单个方法层面

        手动抛出一个运行时异常,postman测试下事务是否回滚,如图在控制台成功打印了插入日志,然后抛出了自定义异常,检查下数据库,确实没有该条数据,测试成功

  

         2.类级别使用

        比如 需要控制整个业务实现类都要回滚,可以将注解加到类上方,表明所有方法会在一个事务中执行

@Service
@Transactional
public class UserService {@Autowiredprivate UserRepository userRepository;public void updateUser(User user) {userRepository.save(user);}public void addUser(User user) {userRepository.add(user);}...
}

        3.指定异常回滚

         在Spring中默认情况下,只有当抛出的异常是 RuntimeException 或者子类时,事务才会回滚,为了让事务在抛出 Exception 也回滚,可以通过自定义配置 rollbackfor 属性来指定需要回滚的异常类型 

        通过测试发现,控制台正常打印插入日志,然后抛出异常,数据库中不会有该条数据,回滚成功

        4.跨方法调用事务管理

        在当前使用了事务方法中调用另一个方法,并且该方法需要事务管理,可以使用 Propagation.REQUIRES_NEW 属性开启,如下,把抛出异常的代码块放到单独的方法中,并且将这段调用方法捕获打印 

       即在同一个类中,saveUser方法会在一个新的事务中执行,不受外部事务的影响

       测试结果如下,由于手动捕获的原因,现在可以正确插入数据

 

         5.只读事务

        在注解上面开启属性(默认为false)  ,则该方法中涉及到的操作限制为只读

        测试如图,控制台提示操作失败,原因是该连接限定了只读

         6.设置超时时间,超时则自动回滚

        测试如下,设置时间为1s (默认单位:秒),看到控制台提示超时信息

         7.隔离级别设置

        Mysql中的隔离机制默认是可重复读,可以解决幻读(两次查询中间有新数据提交)和不可重复读的问题(两次查询中间有老数据修改),可重复读的原理大概是用到了MVCC(多版本并发控制),第一次查询的时候会生成当前版本的视图,后面查询也是查这里的数据

  1. isolation:指定事务的隔离级别,默认为 Isolation.DEFAULT。事务隔离级别决定了多个事务之间的相互影响程度。常见的隔离级别包括:

    • Isolation.DEFAULT:使用默认的隔离级别。
    • Isolation.READ_UNCOMMITTED:允许读取未提交的数据变更。
    • Isolation.READ_COMMITTED:只能读取已提交的数据变更。
    • Isolation.REPEATABLE_READ:可重复读取相同的数据,直到事务结束。
    • Isolation.SERIALIZABLE:所有事务依次执行,避免并发问题。

章末

        文章到这里就结束了~ 

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

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

相关文章

网络安全 | 什么是单点登录SSO?

关注WX:CodingTechWork SSO-概念 单点登录 (SSO) 是一种身份认证方法,用户一次可通过一组登录凭证登入会话,在该次会话期间无需再次登录,即可安全访问多个相关的应用和服务。SSO 通常用于管理一些环境中的身份验证,包…

Arcade 作用力

这个程序展示了简单的变换反馈的应用。变换反馈类似于渲染,但是输出的是一个缓冲区而不是帧缓冲区/屏幕。 这个例子展示了一个常见的ping-pong技术,即在两个缓冲区之间对具有位置和速度的点进行变换,这样我们就始终在前一状态上工作。 初始…

基于Python近红外光谱分析与机器学、深度学习方法融合技术应用

郁磊副教授,主要从事MATLAB 编程、机器学习与数据挖掘、数据可视化和软件开发、人工智能近红外光谱分析、生物医学系统建模与仿真,具有丰富的实战应用经验,主编《MATLAB智能算法30个案例分析》、《MATLAB神经网络43个案例分析》相关著作。已发…

基于Spark中随机森林模型的天气预测系统

基于Spark中随机森林模型的天气预测系统 在这篇文章中,我们将探讨如何使用Apache Spark和随机森林算法来构建一个天气预测系统。该系统将利用历史天气数据,通过机器学习模型预测未来的天气情况,特别是针对是否下雨的二元分类问题。 简介 Ap…

【游戏分析】逆向数组结构分析

追背包数组 用物品数量当突破口 首先CE扫描目标地址 很简单 找到目标地址 对物品数量地址下写入断,然后吃药 OD中追踪其来源 来源 ecx14 根据堆栈情况 判断此处不是函数头部 但是上面就是retn 那么只能是其他位置跳转而来 在上面发现了跳转来的代码 获得便宜…

github本地仓库push到远程仓库

1.从远程仓库clone到本地 2.生成SSH秘钥&#xff0c;为push做准备 在Ubuntu命令行输入一下内容 [rootlocalhost ~]# ssh-keygen -t rsa < 建立密钥对&#xff0c;-t代表类型&#xff0c;有RSA和DSA两种 Generating public/private rsa key pair. Enter file in whi…

数字化赋能乡村:开启乡村发展新纪元

随着信息技术的迅猛发展和数字化浪潮的席卷&#xff0c;乡村发展正迎来前所未有的机遇与挑战。数字化赋能乡村&#xff0c;不仅是推动农业现代化、提升农村治理水平的必由之路&#xff0c;更是开启乡村发展新纪元的关键所在。本文将围绕数字化赋能乡村这一主题&#xff0c;探讨…

好物视频素材哪里找?8个视频素材库免费网址大全

在这个数字化的时代&#xff0c;高清视频已经成为了一种强大的沟通工具&#xff0c;无论是个人分享、教育培训还是商业广告&#xff0c;高质量的视频内容都能够有效地吸引观众的注意力。为了帮助你轻松找到理想的无水印视频素材&#xff0c;下面我为你精心挑选了一系列全球视频…

可以写进简历的软件测试电商项目,不进来get一下?

前言 说实话&#xff0c;在找项目的过程中&#xff0c;我下载过&#xff08;甚至付费下载过&#xff09;N多个项目、联系过很多项目的作者&#xff0c;但是绝大部分项目&#xff0c;在我看来&#xff0c;并不适合你拿来练习&#xff0c;它们或多或少都存在着“问题”&#xff…

[挖坟]如何安装Shizuku和LSPatch并安装模块(不需要Root,非Magisk)

2023年12月13日&#xff0c;LSPatch 停止维护 2024年1月8日&#xff0c;LSPosed 停止维护 2024年1月8日&#xff0c;ZygiskNext 停止维护 2024年1月9日&#xff0c;KernelSU 停止维护 这里使用 ColorOS 14 演示&#xff0c;其他品牌手机类似 安装 Shizuku 官网: https://shiz…

网络安全 | 什么是攻击面管理?

关注WX: CodingTechWork 介绍 攻击面管理 (Attack Suface Management, ASM) 可以持续发现、分析、修复和监控构成组织攻击面的网络安全漏洞和潜在攻击媒介。ASM可以识别目标&#xff0c;并根据其暴露给恶意攻击者的可能性来评估风险&#xff0c;获得攻击者的视角&#xff0c;…

【模糊逻辑】Type-1 Fuzzy Systems的设计方法和应用-1

【模糊逻辑】Type-1 Fuzzy Systems的设计方法和应用 4.1 时间序列预测4.2 提取规则的方法4.2.1 One-pass method&#xff08;一次性方法&#xff09;4.2.1.1数据赋值法例子1 4.2.1.1 WM方法 4.2.2 最小二乘法4.2.3 基于导数的方法4.2.4 SVD-QR方法4.2.6 迭代法 4.1 时间序列预测…

Oracle的物理结构解析

这些图是我自己画的&#xff0c;我也会在我的公众号【会用数据库】解析。理解起来非常简单&#xff0c;而且非常好记。不用死记硬背&#xff0c;有兴趣可以来公众号看呀。

matrix-breakout-2-morpheus

信息收集&#xff1a; 1.nmap存活探测&#xff1a; nmap -sn -r 192.168.10.1/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-04-06 12:13 CST Nmap scan report for 192.168.10.1 Host is up (0.00056s latency). MAC Address: 00:50:56:C0:00:08 (VMware) Nmap…

OpenHarmony实战:Combo解决方案之ASR芯片移植案例

本方案基于 OpenHarmony LiteOS-M 内核&#xff0c;使用 ASR582X 芯片的 DEV.WIFI.A 开发板进行开发移植。作为典型的 IOT Combo&#xff08;Wi-FiBLE&#xff09;解决方案&#xff0c;本文章介绍 ASR582X 的适配过程。 编译移植 目录规划 本方案的目录结构使用 Board 和 So…

多线程+互斥+条件变量题目

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;折纸花满衣 &#x1f3e0;个人专栏&#xff1a;题目解析 目录 &#x1f449;&#x1f3fb; 完成两个线程通过条件变量实现交替打印错误代码加优化(c线程库版本)版本2&#xff08;使用phtread.h库&#xff…

蓝桥杯每日一题:约数个数(质因数)

题目描述&#xff1a; 输入 n 个整数&#xff0c;依次输出每个数的约数的个数。 输入格式 第一行包含整数 n。 第二行包含 n 个整数 ai。 输出格式 共 n 行&#xff0c;按顺序每行输出一个给定整数的约数的个数。 数据范围 1≤n≤1000, 1≤ai≤10^9 输入样例&#xff…

机器学习知识点全面总结

机器学习按照模型类型分为监督学习模型、无监督学习模型两大类。 1、有监督学习 有监督学习通常是利用带有专家标注的标签的训练数据&#xff0c;学习一个从输入变量X到输入变量Y的函数映射。Y f (X)&#xff0c;训练数据通常是(nx,y)的形式&#xff0c;其中n代表训练样本的大…

ARM汇编与逆向工程:揭秘程序背后的神秘世界

文章目录 一、ARM汇编语言&#xff1a;底层世界的密码二、逆向工程&#xff1a;软件世界的侦探工作三、ARM汇编与逆向工程的完美结合四、ARM汇编逆向工程的风险与挑战五、ARM汇编逆向工程的未来展望《ARM汇编与逆向工程 蓝狐卷 基础知识》内容简介作者简介译者简介ChaMd5安全团…

C语言第四十弹---预处理(下)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 预处理 1、#和## 1.1 #运算符 1.2、##运算符 2、命名约定 3、#undef 4、命令行定义 5、条件编译 6、头文件的包含 6.1、头文件被包含的方式 6.1.1、本地…