Spring事务失效场景

news/2024/11/2 0:28:57/

(1)事务方法所在的类没有加载到容器中(未被Spring管理的Bean)

        如果一个被注解的类不是由Spring容器来创建的,比如手动new对象,那么该类的事务注解则不会生效。可以通过将该类交给Spring容器来解决此问题。

(2)事务方法不是public类型

   @Transactional注解只对public方法有效,如果使用它来注解非public方法,则不会开启事务。

(3)同一类中,一个没有添加事务的方法调用另外以一个添加事务的方法,事务不生效

        如果一个使用@Transactional注解标记的方法A中调用了另外一个没被事务管理的方法B并在B中发生异常,就会导致整个事务失效,并不会出现回滚。原因在于,Spring事务实现是通过生成代理对象并对应用程序进行拦截来实现的,而内部调用的方法不通过代理对象的方式调用,因此不会触发事务机制。

(4)spring事务默认只回滚运行时异常,可以用rollbackfor属性设置

        在Spring中,当方法被声明为事务方法时,在抛出运行时异常(如NullPointerExceptionIndexOutOfBoundException等)的情况下,Spring会对整个事务进行回滚操作;而对于非运行时异常(如IOExceptionSQLException等),即使发生异常,Spring也不会对事务进行回滚。可以理解为,Spring默认只对未处理的RuntimeException及其子类进行回滚,对于其他异常则不会回滚。这样做是为了防止一些预期的业务异常导致整个事务被回滚。

        可以通过配置rollbackFor属性或noRollbackFor属性来改变这种默认的行为。rollbackFor属性用于指定要回滚的异常类型,noRollbackFor属性用于指定不回滚的异常类型。例如:

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

(5)业务自己捕获了异常,事务会认为程序正常秩序

        当一个事务方法抛出异常时,如果异常被捕捉住(try/catch块中),那么Spring就无法获取到异常信息,并且整个事务也就无法回滚。解决方法是在catch块中重新抛出异常,或者使用Spring提供的@Transactional(rollbackFor = Exception.class)注解。


http://www.ppmy.cn/news/60493.html

相关文章

【Java】BitSet的使用

BitSet和boolean[]为什么不用boolean[]BitSet相关的API为什么不用boolean[]? boolean[]占用的内存比较大。 以1024个位置为例。 boolean[1024]总共占用1040 bytes,包括对象头等大小。(对象头20bytes) boolean[] bits = new boolean[1024];使用BitSet(1024)的话,总共占用…

搭建Serv-U FTP服务器共享文件外网远程访问「无公网IP」

文章目录 1. 前言2. 本地FTP搭建2.1 Serv-U下载和安装2.2 Serv-U共享网页测试2.3 Cpolar下载和安装 3. 本地FTP发布3.1 Cpolar云端设置3.2 Cpolar本地设置 4. 公网访问测试5. 结语 转载自内网穿透工具的文章:使用Serv-U搭建FTP服务器并公网访问【内网穿透】 1. 前言…

Center-based 3D Object Detection and Tracking 论文学习

论文地址:Center-based 3D Object Detection and Tracking Github 地址:Center-based 3D Object Detection and Tracking 1. 解决了什么问题? 在点云中,3D 目标通常以 3D 框的形式表示。这个表征借鉴于 2D 图像的检测&#xff0…

C#学习教程大纲

以下是C#学习教程的大纲: 第一部分:基础知识 C#简介 什么是C#? C#的历史和发展 C#的特点和优势 开发环境的搭建 安装Visual Studio开发环境 配置开发环境 第一个C#程序 Hello World程序 程序的结构 编译和运行程序 数据类型和变…

鲲鹏昇腾开发者峰会2023举办

[2023年5月6日 广东东莞]今天,以“创未来 享非凡”为主题的鲲鹏昇腾开发者峰会2023在东莞松山湖举办。 鲲鹏产业生态繁荣,稳步发展,正在成为行业核心场景及科研领域首选,加速推动数字化转型;昇腾产业快速蓬勃向上&…

人生四维度

人生四维度 不是有钱了就成功,你知道;人生的成功不止一种,你也知道。但成功还有哪种?你知道吗? 如果把人生的体验展开,我们可以得到四个维度,高度、深度、宽度和温度。 财富、权力、影响力 构…

渗透测试流程方法工具详情

渗透测试分类 黑盒测试:从远程网络位置来评估目标网络基础设施,没有任何相关信息 白盒测试:内部发起,了解到关于目标环境的所有内部与底层知识 灰盒测试:结合两者优势,根据对目标系统所掌握的有限知识与信息,来选择评估整体安全性的最佳途径 测试方法 OSSTMM安全测试方法…

使用MASA全家桶从零开始搭建IoT平台(二)设备注册

前言 我们不希望任何设备都可以接入我们的IoT平台,所以一个设备正常的接入流程是这样的, 1、上位机软件通过串口或其他方式读取设备的唯一标识码UUID。 2、上位机调用IoT后台接口,发送UUID和ProductID。 3、后台接口判断设备是否注册过&…