【事务注解✈️✈️】@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,一经查实,立即删除!

相关文章

用递归方法求n!(n的值最好小于13,int型数据分配4个字节,能表示的最大数为2147483647)

#include <stdio.h> // 主函数&#xff1a;计算并输出给定整数的阶乘 int main(){ // 声明阶乘函数 int fac(int n); int n, y; // 输入一个整型数字 printf("请输入一个整型数字:"); scanf("%d", &n); …

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

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

Arcade 作用力

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

c++算法学习笔记 (21) STL

1.vector: 变长数组&#xff0c;倍增的思想 size()返回元素个数 empty()返回是否为空 clear()清空 front()/back()元素 push_back()/pop_back() begin()/end()迭代器 [] 支持比较运算 2.pair<int,int>: first:第一个元素 second:第二个元素 支持比较运算&#xff0c;先比…

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

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

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

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

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

追背包数组 用物品数量当突破口 首先CE扫描目标地址 很简单 找到目标地址 对物品数量地址下写入断&#xff0c;然后吃药 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…

ES6的new Set()方法有什么用法

Set 是什么&#xff1f; Set是es6新增的数据结构&#xff0c;类似于数组&#xff0c;但它的一大特性就是所有元素都是唯一的&#xff0c;没有重复的值&#xff0c;我们一般称为集合。Set本身是一个构造函数&#xff0c;用来生成 Set 数据结构。Set函数可以接受一个数组作为参数…

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

随着信息技术的迅猛发展和数字化浪潮的席卷&#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…

TDengine 使用爬坑

TDengine 安装 爬坑 使用安装包立即开始 | TDengine 文档 | 涛思数据 (taosdata.com) linux 服务端版本 TDengine-server-3.2.3.0-Linux-x64.rpm (61.2 M) taosTools-2.5.2-Linux-x64-comp3.rpm (0.2 M) windows 客户端版本 TDengine-client-3.2.3.0-Windows-x64.exe (9.…

高级排序算法-快速排序

高级排序算法-快速排序 这个方法的代码参考leecode平台的大佬——liweiwei1419的文章&#xff0c;原文出处&#xff1a;https://leetcode.cn/leetbook/read/learning-algorithms-with-leetcode/55szu2/ 本文语言用的是C&#xff1a; 快速排序实现一&#xff08;大放过&#…

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

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