Spring 事务 @Transactional 注解

news2025/1/17 0:12:30

上期我们讲解了Spring事务的两种实现,其中声明式注解使用了 @Transactional 注解, 接下来我们学习 该注解的使用细节。

我们主要学习 @Transactional注解当中的三个常见属性:

rollbackFor:异常回滚属性,指定能够出发事务回滚的异常类型,可以指定多个异常类型

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

1. rollbackFor

@Transactional 默认只在遇到运行时异常和Error时才会回滚,非运行时异常不回滚,即 error及子类,RuntimeException 及子类 才会回滚:

解上次代码我们添加一个测试方法:

    @Transactional
    @RequestMapping("/test1")
    public Boolean test1(String userName, String password) throws IOException {
        userService.registry(userName, password);
        if(true) {
            throw new IOException();
        }
        return true;
    }

不会回滚

    @Transactional
    @RequestMapping("/test1")
    public Boolean test1(String userName, String password) throws RuntimeException {
        userService.registry(userName, password);
        if(true) {
            throw new RuntimeException();
        }
        return true;
    }

会回滚 

我们可以通过配置 @Transactional 注解中的 rollbackFor 属性来指定出现何种异常类型时事务进行回滚。

    @Transactional(rollbackFor = Exception.class)
    @RequestMapping("/test1")
    public Boolean test1(String userName, String password) throws IOException {
        userService.registry(userName, password);
        if(true) {
            throw new IOException();
        }
        return true;
    }

会回滚

2. Spring 事务隔离级别

Spring 中事务隔离级别有5种:

  1. Isolantion.DEFAULT:以连接的数据库的隔离事务级别为主。
  2. Isolation.READ_UNCOMMITTED:读未提交,对应SQL标准中 READ UNCOMMITTED
  3. Isolation.READ_COMMITTED:读以提交,对应SQL标准中 READ COMMITTED
  4. Isolation.REPEATABLE_REWAD:可重复读,对应SQL标准中 REPEATABLE READ
  5. Isolation.SERIALIZABLE:串行化,对应SQL标准中 SERIALIZABLE
public enum Isolation {
    DEFAULT(-1),
    READ_UNCOMMITTED(1),
    READ_COMMITTED(2),
    REPEATABLE_READ(4),
    SERIALIZABLE(8);
    private final int value;
    private Isolation(int value) {
        this.value = value;
    }
    public int value() {
        return this.value;
    }
}

 Spring 中事故隔离级别可以通过 @Transational 中的 isolation 属性进行设置

    @Transactional(isolation = Isolation.READ_UNCOMMITTED)
    @RequestMapping("/test")
    public Boolean test(String userName, String password) throws IOException {
        userService.registry(userName, password);
        if(true) {
            throw new IOException();
        }
        return true;
    }

3. Spring 事务传播机制

事务的传播机制是:多个事务方法存在调用关系时,事务是如何在这些方法间进行传播的。

例:

现有两个方法 A 和 B 都被 @Transactional 修饰, A方法中调用了B方法,A方法运行时会开启一个事务,当 A 调用 B 时,B 方法本身也有事务,此时B方法是加入 A 的事务还是创建一个新的事务,就涉及到了事务的传播机制。

@Transactional 注解支持事务传播机制的设置,通过 propagation 属性来指定传播行为。

Spring 事务传播机制有以下7种:

  1. Propagation.REQUIRED:默认的事务传播级别,如果当前存在事务,则加入该事务,否则创建一个新的事务。
  2. Propagation.SUPPORTS:如果当前存在事务,则加入该事务,如果没有事务则以非事务方式运行。
  3. Propagation.MANDATORY:强制性,如果当前存在事务,则加入该事务,如果没有事务就抛出异常。
  4. Propagation.REQUIRES_NEW:创建一个新的事务,如果当前存在事务,则把当前事务挂起(不使用),创建一个新的事务,该事务与外部事务相互独立。(两个事务的回滚不会互相影响)
  5. Propagation.NOT_SUPPORTED:以非事务方式运行,如果当前存在事务则把当前事务挂起不使用。
  6. Propagation.NEVER:以非事务方式运行,如果当前存在事务,则抛出异常。
  7. Propagation.NESTED:如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行,如果当前没有事务,则创建一个新事务。

这里我们解释以下 Propagation.NESTED , 在嵌套事务的情况下,无论哪个方法发生异常都会导致所有的事务回滚,不过与Propagation.REQUIRED的区别在于,如果 子事务发生异常,可以使用try catch 语句,在catch中把子事务单独进行回滚,而不影响其他事务(因为异常被捕获了,其他事务感知不到),但是如果父事务进行了回滚,则子事务也一定都会回滚。

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

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

相关文章

河道采砂执法监管信息化平台:科技赋能,智慧监管

随着信息技术的飞速发展,信息化平台已经成为提升行业监管效率和水平的重要工具。河道采砂作为水利资源管理的重要环节,其执法监管同样需要与时俱进,利用先进技术手段提升监管效能。河道采砂执法监管信息化平台便是这一背景下的产物&#xff0…

【总结】hbase master重启恢复失败问题修复

问题现象 最近hbase master 莫名其妙宕机了,查看最后输出日志,也没有发现有效信息。 于是想着先重启一把,在hbase master 选主成active状态的过程中,发现重启多次都很漫长,且最终因重启时间过长,被hbase-…

基于STM32的蓝牙小车(虚拟串口模拟)的Proteus仿真

文章目录 一、前言二、仿真图1.要求2.思路3.画图3.1 电源部分3.2 超声波测距部分3.3 电机驱动部分3.4 按键部分3.5 蓝牙部分3.6 显示屏部分3.7 整体 4.仿真5.软件 三、总结 一、前言 proteus本身并不支持蓝牙仿真,这里我采用虚拟串口的方式来模拟蓝牙控制。 这里给…

了解网卡、光猫、路由器

了解网卡、光猫、路由器 一、网卡二、光猫三、路由器四、光猫和路由器的联系和区别五、家庭正常上网的简单流程六、企业正常上网的简单流程 一、网卡 网卡:用来允许计算机在计算机网络上进行通讯的计算机硬件 一般来说,笔记本都有两种网卡,有…

栈和队列--数据结构

栈(Stsck) 概念 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵循“后进先出”(LIFO)的原则。 …

性价比高超声波清洗机品牌有哪些?四款高性价比超声波清洗机安利

如果你经常不清洗眼镜,那么非常推荐你入手一台超声波清洗机在家清洗眼镜!因为,超声波清洗机清洗眼镜真的非常方便。如果你经常佩戴眼镜,但是常常忘记清洗的话,看完这篇文章后一定要改掉不清洗眼镜的坏习惯,…

ffmpeg的安装以及使用

1.FFmpeg 的主要功能和特性: 格式转换:FFmpeg 可以将一个媒体文件从一种格式转换为另一种格式,支持几乎所有常见的音频和视频格式,包括 MP4、AVI、MKV、MOV、FLV、MP3、AAC 等。视频处理:FFmpeg 可以进行视频编码、解…

数码相机数据恢复,3招找回珍贵照片!

“我有一部数码相机,存储了很多很重要的文件和数据。但是我一不小心就误删了里面的重要数据,有什么方法可以恢复相机里的文件吗?” 数码相机已成为我们日常生活中不可或缺的一部分,它帮助我们记录生活的点滴,留下美好的…

SSL证书一年要多少钱

经常会被人问道:“安装SSL证书一年得要多少钱?”其实证书的类型不同、功能不同、品牌不同,证书的价格也会不一样。SSL证书的价格因其类型、品牌、购买渠道以及所包含的服务和支持等因素而有所不同。通常一年的费用从几十元到几万元不等。 一…

ABAP Visual Code 新建sap系统连接

本文主要介绍如何新建SAP前端系统链接 前提是你已经都扩展完了 1.点击SAP fiori--》点击新建 2.选择 abap on premise 3.输入如下信息 4.这里介绍下URL 如何获取 SMICM-->点击service 明细里面可以看到你的host name 和 port 当然你也可以随便找一个你的odata 服务看下ur…

在vscode使用MATLAB

官方链接 首先安装好vscode、python 与 MATLAB,注意python与MATLAB的版本,参考链接 都安装好后 验证: 安装插件:matlab in vscode ,并进行如下设置,参考链接 至此就差不多OK了

Uvicorn+Gunicorn+FastAPI学习笔记

WSGI Web服务器网关接口(Python Web Server Gateway Interfeace,缩写WSGI)是为python定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口。 Gunicorn Gunicorn是一个基于Python的WSGI(Web服务器网关接口)HTTP服务器&#xff0…

看完马云的简历,我明白了为什么他对钱没有兴趣。。。

程序员的成长之路 互联网/程序员/技术/资料共享 关注 阅读本文大概需要 2.8 分钟。 来自:网路 马云的人生故事,如同一部传奇,充满着坎坷、奋斗和成功。 尽管他早年的高考经历并不顺利,但他的坚韧和梦想驱使着他不断前行&#xff…

算法-KMP算法

时间复杂度&#xff1a; public int strStr(String haystack, String needle) {int[] next new int[needle.length()];//next数组的生成next[0] 0;int prefixLen 0;//共同前后缀长度int i 1, j 1;//i,j复用while (i < needle.length()) {if (needle.charAt(prefixLen)…

可视化大屏的应用(16):智慧社区和网格化管理的价值

hello&#xff0c;我是大千UI工场&#xff0c;本篇分享智慧社区和网格化管理大屏设计&#xff0c;关注我们&#xff0c;学习N多UI干货&#xff0c;有设计需求&#xff0c;我们也可以接单。 实时监控和预警 可视化大屏可以将社区内各种数据、指标和信息进行实时监控和展示&…

Spring 注解开发详解

1. 注解驱动入门案例介绍 1.1 需求描述 1.需求&#xff1a;实现保存一条数据到数据库。 2.表结构&#xff1a;create table account(id int primary key auto_increment,name varchar(50),money double(7,2)); 3.要求&#xff1a;使用spring框架中的JdbcTemplate和DriverMana…

WEB攻防-.NET特性常见漏洞

目录 前置知识&#xff1a; DLL文件 .NET和DLL文件 C#和DLL文件 关系总结 .NET 配置调试-信息泄露 .NET 源码反编译-DLL 反编译与未授权访问 编译DLL文件 反编译DLL文件 注意事项 案例&#xff1a; 验证代码文件有没有可以绕过&#xff08;Cookie&Session&…

Web前端开发之HTML_2

HTML5简介与基础骨架标题标签标签之段落、换行、水平线标签之图片标签之超文本链接标签之文本列表标签之有序列表列表标签之无序列表 1. HTML5简介与基础骨架 1.1 HTML5简介 HTML5是用来描述网页的一种语言&#xff0c;被称为超文本标记语言。用HTML5编写的文件&#xff0c;后…

Linux——web基础实验

实验前的安装 [rootwebserver ~]# yum -y install httpd [rootwebserver ~]# systemctl enable --now httpd Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service. [rootwebserver ~]# echo test for apach…

2024技术巅峰:【研发效能·创享大会】精彩不容错过!

嗨享技术轰趴 【朋友们&#xff0c;5月25日&#xff0c;北京聚起来&#xff01;】 一场汇聚行业精英、聚焦AIGC、BizDevOps、ToB产品管理、B端产品运营、平台工程、研发效能、效能度量、职业画布、DevOps国标解读等前沿议题的研发效能创享大会即将开启&#xff01; 大会的讨论…