Springboot事务失效的原因及解决办法

SpringBoot+Shiro引起事务失效、错误原因、解决方法 一、问题 今天发现用户注册的Service的事务并没有起到作用,再抛出一个RuntimeException后,并没有发生回滚,下面是调试步骤: 1、检查数据库的引擎是否是innoDB 2、启动类上是否加入@EnableTransactionManagement注解 3、是否在方法上加入@Transactional注解或Service的类上是否有@Transactional注解 4、方法是... 阅读详情

问题

先看下问题代码,下面两个方法属于同一个service类

@Transactional(rollbackFor = Exception.class)
    public void addFile(FileDTO file, String operator) {
    	//一些列操作
    	...
    }
public void addMultiFiles(MultipartFile[] files, String operator) throws IOException {
	...
	addFIle();
	...
}

如图,addFile添加了事务管理,然后通过测试addMultiFile测试时addFile中的事务失效,无法在出现异常时回滚数据库。

原因

spring中的事务是依赖AOP的,AOP是通过动态代理实现的,只有通过代理类访问的方法才能被拦截(外部调用都是调用的相应的代理类),而上述问题中addMultiFile直接内部调用了addFile方法,所以addFile中的事务就不会生效。

解决办法

知道原因之后就好解决了,想办法获取该service类的代理类,通过代理类来调用addfile方法就行

public void addMultiFiles(MultipartFile[] files, String operator) throws IOException {
	...
	/*进行上传,直接内部调用会导致事务失效,需要获取相应的代理对象来调用*/
   ((FileService)AopContext.currentProxy()).addFile(fileDTO, operator);
	...
}

加入后运行会报个错,需要你设置exposeProxy = true
在该类上加个注解

@EnableAspectJAutoProxy(exposeProxy = true)  //暴露代理对象
public class FileService {
	...
}

此时addFile就能正常回滚

小插曲

加入@EnableAspectJAutoProxy提示找不到该类
原来是自己没有导入aop的相关依赖

		<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
springBoot注解事务失效分析总结 一 问题背景 前段时间在项目中使用到spring事务注解功能,在自测代码时发现异常下未能产生回滚操作,借此空闲将之前问题定位思路整理如下,希望对大家定位该类问题提供解决思路。 二 分析与解决 本次测试工程采用springBoot+mybits+mysql进行验证,在controller中注入service调用service的实现类进行事务操作,项目结构如下图所示 ... 阅读详情

相关推荐

spring boot注解@Transactional失效

引言 数据库事务,将有限系列的执行命令作为单个逻辑执行单元,单元内的任务要么全部成功,要么全部失败。 起因 由于业务逻辑需要,操作要么全部成功,要么全部失败。于是,抽出一个公共的service对数据库进行增删改操作。在执行这个方法的时候发现最后一次的操作失败了之后,前面的所有操作都成功了,没有回滚。 如何排查事务失效的原因 当@Transactiona...

隔壁老瓦的专栏 1958

Spring事务失效

根据事务失效情景进行源码追踪分析

qq_38074398的博客 451

Python爬虫实战:从巨潮资讯网高效获取结构化JSON数据

在数据采集与处理领域,网络爬虫是实现自动化信息获取的核心技术。其基本原理是通过模拟浏览器行为,向目标服务器发送HTTP请求并解析响应内容,从而提取所需数据。相较于传统的网页解析,直接获取结构化数据(如JSON格式)能极大提升数据处理的效率与准确性,避免了复杂的HTML解析或PDF文本提取过程。这一技术价值在金融数据分析、市场研究、舆情监控等场景中尤为突出,能够快速构建高质量的数据集。本文以Python爬虫为例,聚焦于从巨潮资讯网这类官方信息披露平台,精准定位并抓取JSON格式的上市公司年报数据,详细阐述了接

weixin_29243279的博客 1419

springboot项目中事务注解无效

在项目中,如果已经加上@Transactional注解,相对应的依赖也都已经导入,这个时候可以查看一下插入的表类型是否为InnoDB,该类型的表支持事务操作,但是表类型为MyISAM,是不支持事务操作的,因为该类型的表是非事务安全的,所以无法实现数据回滚。 出现该情况需要修改表类型即可。 ALTER TABLE tablename ENGINE = InnoDB 如下所示:表明修改成功 ...

小呆娃的博客 1199

PLC编程进阶:结构体(UDT)与功能块(FB)的模块化实践指南

本文深入探讨了PLC编程中实现模块化的核心方法,重点解析了结构体(UDT)与功能块(FB)的协同应用。通过将零散数据封装为UDT,并将控制逻辑打包为可复用的FB,能够构建出结构清晰、易于维护和调试的PLC程序。文章结合拧紧枪、电机控制等实战案例,提供了从设计原则到分层架构的完整实践指南,旨在帮助工程师将混乱的‘面条式’代码改造为高效的‘正规军’。

s3t4u的博客 221

视觉惯性SLAM系列——ORB-SLAM3的整体介绍及各个线程的功能(五)

跟踪线程(Tracking Thread)作用:负责处理每一帧图像,进行相机位姿的估计和定位。它首先执行与前一帧图像的特征匹配,然后通过仅运动(motion-only)BA(Bundle Adjustment)优化位姿。如果跟踪失败,它会尝试在所有地图中进行重定位。此外,跟踪线程还负责决定何时插入新的关键帧,以及何时将关键帧从局部地图中移除。详细介绍见局部建图线程(Local Mapping Thread)作用:管理局部地图,向活跃地图添加关键帧和点,移除多余的关键帧和点。

曾经也曾立志 1004

SpringBoot中事务失效的六个原因

文章记录了在SpringBoot中事务失效常见的六个原因以及对事务相关接口的简单分析

yfs1024 4733

openEuler 22.03 安装及配置Gitlab容器

在 openEuler 22.03 上安装及配置Gitlab容器

轻步玉阶 3314

@Cacheable等注解在类内调用失效原因分析及解决方案

首发地址:keysking瞎写东西的地方 起因 最近使用@Cacheable来进行接口缓存,但是出现了一个奇怪的现象,缓存注解写在Service的函数上,用Controller调就能正常缓存进redis,但是在Service类里调用却不能正常缓冲,想当玄幻. 破案 百思不解的我最后只得求助某大佬学妹,得到了一个答案: 在同一个类里调用使用@Cacheable的接口不会生效!!! 分析 查过一些...

keysking瞎写东西的地方 2182

Palantir如何利用Ontology构建企业级数据地图

Palantir通过"本体论"(Ontology)技术构建动态数据地图,将多源异构数据转化为可操作的业务知识网络。该技术突破传统ETL模式,建立覆盖全组织的语义层,将原始数据映射为"客户""订单"等业务对象及其关联关系,形成可推理的语义网络。核心Foundry平台提供本体管理工具(OMA)和开发套件(OSDK),支持从数据连接到应用开发的全流程。虽然采用专有实现而非标准本体语言,但该架构成功解决了数据孤岛问题,赋能复杂决策分析

Learning 1797

Python航空航天设计神器!从入门到实操,小白也能搞定飞机优化

AeroSandbox的核心价值的是:​降低航空工程优化的门槛,用Python实现高效、简洁的工程设计​。无论是科研、学习还是实际项目,它都能帮你节省大量时间,不用再手动推导导数、编写复杂的优化逻辑。对于新手来说,建议先从案例1(Rosenbrock函数)入手,熟悉优化流程,再尝试案例2(翼型优化),逐步掌握核心用法;对于有航空相关需求的小伙伴,可以深入研究内置的物理模型,结合自己的项目进行定制化开发。最后,互动时间到!👉 你是用AeroSandbox做科研、练手还是实际项目?

源代码杀手的博客 124

Spring AOP代理失效情况

Spring在程序运行期,就能帮助我们把切面中的代码织入Bean的方法内,让开发者能无感知地在容器对象方法前后随心添加相应处理逻辑,所以AOP其实就是个代理模式。 但凡是代理,由于代码不可直接阅读,也是初级程序员们 bug 的重灾区。 1 案例 使用this方法,调用本类的某个方法,统计该方法的调用时间 @Service public class DoSomething(){ public void work(){ this.do(); } public v

sayhitoloverOvO的博客 2518

SAP 合并报表(EC-CS)完整方法论 + 全业务操作步骤

SAP合并报表(EC-CS)方法论与操作指南摘要 SAP EC-CS模块提供完整的集团合并解决方案,其核心方法论基于会计准则和集团管控逻辑,通过6大维度构建标准化合并体系:组织架构标准化、数据采集标准化、外币换算规则化、内部交易自动化抵消、股权与商誉规范化、报表出具灵活化。 实施过程分为两个阶段: 上线前配置阶段(12个步骤):包括合并架构搭建、科目表配置、外币规则设定、抵消规则定义等基础工作 日常操作阶段(10个步骤):涵盖数据报送、外币换算、内部对账、自动抵消、调整分录等月结流程 系统优势包括: 支持多

金牌架构师 1365

SpringBoot 内部方法调用,事务不起作用的原因及解决办法

SpringBoot 内部方法调用,事务不起作用的原因及解决办法

wangchaoqi1985的博客 202

罗克韦尔AB PLC_FactoryTalk无法登录的解决方法

罗克韦尔AB PLC_FactoryTalk无法登录的解决方法

Robot_PLC_HMI_Automation 3575

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

本地事务——事务特性的自我理解、被忽视的点

事务的基本性质(ACID) 原子性、一致性、隔离性、持久性 原子性:一系列的操作不可分隔,要么同时成功,要么同时失败 一致性:数据在事务的前后,业务整体一致。 · 转账 A:1000,B:1000。转:200。事务成功:A:800,B:1200 隔离性: 持久性: 事务的隔离级别 事务的传播行为 SpringBoot事务的关键点 ...

weixin_45716265的博客 249

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

SpringBoot事务失效:自调用陷阱与AOP修复

首先先看我现有的代码环境![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/c5aea7cd98ec469e94be7c082dd1a42c.png这里我的理解应该是update的时候,更新emp会失败,但是更新salgrade的时候应该会成功,但是实际效果是,不会成功,主要原因是当前对象直接调用了自身对象的方法,绕过了代理对象的处理,造成了事务传播的失效。

qq_21278491的博客 488

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Spring AOP动态代理失效的解决方法@Transactional为何会失效

环境:springboot2.3.10 演示类 JavaBean public class User { private Integer id ; private String name ; public User(Integer id, String name) { this.id = id; this.name = name; } } DAO接口 public interface UserDAO { User save(User user) ;

asoklove的专栏 1557

Spring Boot 事务失效的八大原因及解决方案详解

本文总结了SpringBoot中@Transactional事务失效的八大常见原因及解决方案:1)数据库引擎不支持(改用InnoDB);2)非public方法(应标注public);3)类内自调用(分离事务方法到不同类);4)异常处理不当(正确配置rollbackFor);5)传播行为错误设置(理解各行为含义);6)类未被Spring管理(添加@Service等注解);7)多线程调用(避免跨线程事务);8)配置问题(检查事务管理器配置)。文章还提供了开启事务调试日志的方法,帮助开发者快速定位问题。

qq_45110186的博客 1542

【2026版】Spring面试题

所谓的IOC(inversion of control),就是控制反转的意思。在传统的程序设计中,应用程序代码通常控制着对象的创建和管理。例如,一个对象需要依赖其他对象,那么它会直接new出来对象。而在IOC 中,控制关系发生了反转。控制权被转移到Spring容器中,容器负责创建和管理对象,并在需要的时候将它们注入到应用程序中。所以,原来这个对象的控制权在我们的代码中,我们自己new的对象,在Spring中,应用程序不再控制对象的创建,而是被动地接受由容器注入的对象。

fim77的博客 1490

Spring框架学习笔记

Spring框架相关面试题。

Hardway_King的博客 725

SpringBoot 事务失效及其对应解决办法

本文主要讲述Spring事务会去什么情况下失效及其解决办法Spring 通过AOP 进行事务控制,如果操作数据库报异常,则会进行回滚;如果没有报异常则会提交事务;但是,如果Spring 事务失效,会导致数据缺失/重复等异常问题。

zhouzhiwengang的专栏 2568

内部方法调用,事务不起作用的原因及解决办法

在做业务开发时,遇到了一个事务不起作用的问题。事情是这样的,方法内部的定时任务调用了一个带事务的方法,失败后事务没有回滚。查阅资料后,问题得到解决,记录下来分享给大家。 场景 我在这里模拟一个场景,大概的调用方式就如下面的代码这样。 @Override @Transactional(rollbackFor = RuntimeException.class) public ...

平头哥的技术博文 7648

SpringBoot的事务失效

Spring Boot 中的事务失效通常是由于代理机制、异常处理、传播行为配置不当等原因引起的。通过合理配置和排查,可以有效避免事务失效问题。确保方法是通过 Spring 代理调用的。正确处理异常,保证事务回滚。合理配置事务传播行为,以满足不同的业务需求。确保数据库支持事务,例如使用 InnoDB。

qq_73360961的博客 1893

SpringBoot中事务失效的原因

常见的事务失效原因包括如下六个。

weixin_44023129的博客 660

springboot 事务自调用失效

springboot 事务自调用失效

weixin_43931625的博客 3773
上一篇: pycharm中运行flask(包含线程)的一点疑问
下一篇: 空气质量预测
Cestbo1
博客等级 码龄10年 53粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值