自己遇到的事务失效情况及解决方法

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

自己遇到的事务失效情况 (直接调用的意思是this.B()的形式或者B()形式调用) 

同一个类中

1、A方法没有加事务,B方法加了事务,在A方法直接调用B方法,B方法出现异常了,B方法不会回滚

原因:spring在扫描包的时候会扫描到@Transactional注解的方法,spring的回滚是用过代理模式生成的,如果是一个不带事务的方法调用该类的带事务的方法,直接通过this.xxx()调用,而不生成代理事务,所以事务不起作用

 

2、a方法默认传播行为即Propagation.REQUIRED,b方法propagation = Propagation.REQUIRES_NEW传播行为 ,a方法和b方法都有事务,在a方法直接调用b方法,在a中将b的异常捕获了,b方法没有回滚

原因:虽然spring可以将这两个方法的注解扫描到产生代理对象,但是在A方法中直接调用B方法,调用方法是真实对象调用的,而不是代理对象调用的,所以B方法的事务是失效的,事务不不会回滚

 

解决方法可以在类中将本类装配进来,用装配进来的对象调用B方法

例如

@Autowired
private UserLoginService userLoginService;

userLoginService.B()

 

补充:

方法a上有事务,但在方法a没有增删改操作,方法b没有事务,在方法b里有增删改操作 (方法a执行结束后事务才会提交或者回滚)

场景:方法a调用方法b,当b有异常,b会回滚;(这里不管是直接调用即b()或者this.b() 还是用service.b() 调用数据库都会回滚)

场景:方法a调用方法b,当a有异常,b会回滚;(这里不管是直接调用即b()或者this.b() 还是用service.b() 调用数据库都会回滚)

 

方法a上没有事务,方法b也没有事务,在方法b里有增删改操作

场景:方法a调用方法b,b操作数据库语句一结束,数据就会更新,后续当b有异常,b不会回滚;(这里不管是直接调用即b()或者this.b() 还是用service.b() 调用数据库都不会回滚)

【spring】Spring事务失效分析,事务回滚失败原因,事务的传播机制 1.第一种情况 :调用方加上@Transactional 注解,被调用方未加上注解 (同一个service类) Exp: @Transactional void methodA(){ // insert table1 methodB(Object obj); } void methodB(){ // insert table2 } 结论:methodB()出现异常,抛给methodA,A中捕获到异常,进行回滚处理,table1,table2都未插入 2.第二种情况:调用方未加上注解,被调用方加上注解(同 阅读详情

相关推荐

5分钟搞定Google Custom Search API申请:从注册到获取CX Key全流程

本文详细介绍了如何快速申请和配置Google Custom Search API,从Google Cloud项目创建、启用计费、获取API Key,到在Programmable Search Engine控制台创建自定义搜索引擎并获取关键的CX Key,提供了全流程实战指南。文章还包含安全配置建议、API调用测试方法及前端与后端的集成代码示例,帮助开发者高效实现网站或应用的智能搜索功能。

weixin_29227585的博客 1668

Spring的事务 方法A调用方法B,事务是否失效

springboot的有事务方法调用没有方法的事务,事务是否失效?

lzq2357639195的博客 1万+

利用ORCAD/pspice 仿真分析电路的幅度相位谱

利用ORCAD的pspice仿真分析电路的相位谱1.介绍2.搭建电路原理图3.建立仿真文件,进行交流分析4.仿真、查看输出5.总结 1.介绍 orcad配合pspice一直是电路原理图绘制和仿真的主要工具,pspice工具提供了诸如暂态分析、直流分析、交流分析等多个工具。学校主要教的是multisim,对orcad讲得很少,最进要利用orcad对运放构成的电路的频响、相移特性进行分析,发现资料幅度...

qq_40011737的博客 1万+

A调用B方法,@Transactional事务失效情况

本人做了各种情况的测试,结果如下: 总结: 方法A调用方法B: 1、如果只有A加@Transactional注解;则AB在同一事务中; 2、如果只有B加@Transactional注解;AB方法为同一类,事务失效;AB不同类,只有B有事务; 原理: spring 在扫描bean的时候会扫描方法上是否包含@Transactional注解,如果包含,spring会为这个bean动态地生成一个子类(即...

严老板的技术梦想博客 1万+

跨模型的 API 调用与集成:使用 Spring AI 构建可移植的 API 代码,支持多个 AI 模型(如 OpenAI、Anthropic 等)的调用

Spring AI 是 Spring 生态系统中的一部分,旨在提供一种简单、可扩展的方式来集成人工智能模型。Spring AI 使得开发者可以使用现有的 Spring 体系结构方便地访问多种 AI 模型和服务,例如 OpenAI、Anthropic、HuggingFace 等。

秋元的博客 2404

EMD (经验模态分解) 在 C++ 中的实现指南

EMD 是由 Norden E. Huang 等人在1998年提出的一种适用于非线性和非平稳信号的分析方法。对称性:IMF 的上下包络对称。零交叉点:IMF 的零交叉点数量与极值点数量相同或相差一个。本文详细介绍了如何在C++中实现EMD,包括理论背景、算法步骤、代码实现和优化等内容。通过丰富的代码示例和详细的解释,希望能够帮助读者掌握EMD的基本原理,并能够在实际项目中灵活应用。未来,随着信号处理技术的不断发展,EMD及其变种(如EEMD、CEEMDAN等)将继续在各个领域发挥重要作用。

qq_38334677的博客 1749

嵌套事务总结

最近线上发生了一起故障,是关于嵌套事务未回滚的问题,这里记录一下。 发生故障的场景是: 主方法parent()里调child()方法,当child()抛出异常时,parent()和child()均未回滚。背景先介绍到这里,你可以先想想为什么没回滚,下面由浅入深讲解。 ------------------------------------华丽的分割线------------------...

蓝天之枫 2万+

链接文件及功能安全:英飞凌官方文档摘录 - 基于Tasking与AURIX TC3xx MCAL中Link文件解析以及代码变量定位方法详解

Data区域是用来存放带初始化值的全局变量,在link文件中,这个区域有两种类型,预先定义的区域和默认区域。预先定义的Data区域,例如.data.Ifx_Ssw_Tc1和.data.Cpu1_Main.*,在cpu1_main.c中如果定义了一个带初始化值的变量,则它会放在DSRAM1中的.data.Cpu1_Main.*段中。

梦想技术家 539

spring事务的传播机制

注意:仅用于个人理解手记,不具备权威准确性 spring事务的传播机制 一.场景 A类方法调用B类方法有效,同类多个方法调用无效,一般是加载service层的调用者和被调用者方法上 二.默认属性 @Transactional(propagation=Propagation.REQUIRES, isolation=Isolation.READ_COMMITTED, noRollbackFo...

ycy白米饭的博客 458

YOLOv11涨点改进 | Conv篇/小目标改进 | YOLOv11引入SPDConv卷积特征无损下采样模块,增加YOLOv11小目标P2检测层(助力小目标任务高效涨点)

本文提出了一种创新的SPDConv模块来优化YOLOv11模型,通过空间到深度(SPD)层和非步幅卷积层实现特征无损下采样。该方法有效解决了传统CNN中因跨步卷积和池化层导致的细粒度信息丢失问题,特别提升了小目标检测性能。实验表明,SPDConv在目标检测和图像分类任务中显著优于现有SOTA模型。文章详细介绍了模块原理、核心代码实现,并提供了YOLOv11集成SPDConv的具体方法,包括配置文件修改和P2层增强等优化技巧。该技术为计算机视觉任务提供了一种高效的特征保留方案。

Ai缝合怪、助力小伙伴高效发论文 586

高级数据结构之R树(R-tree)

R树(R-tree)是一种将B树扩展到多维情况下得到的数据结构,它最初由Antonin Guttman于1984年提出。B树的结点中会存储一个键的集合,这些键把线分成片段,沿着那条线的点仅属于一个片段。因此,B树使得我们可以很容易地找到点。如果把沿线各处的点表示成B树结点,我们就能够确定点所属唯一子结点,在那里可以找到该点。 Antonin Guttman在他提出R树的经典论文中给出的R树例子...

白马负金羁 1万+

同类不同方法相互调用时的@Transactional失效问题

本文旨在探讨同一类中,方法相互调用对Spring事务注解生效与否的影响。

Ka__ze的博客 2946

YOLOv7独家原创改进:多种新颖的改进方式 | 保持原始信息-深度可分离卷积(MDSConv) | 全局感受野的空间金字塔 (Improve-SPPF)算法 | CA注意力改进版

多种新颖的改进方式 | 保持原始信息-深度可分离卷积(MDSConv) | 全局感受野的空间金字塔 (Improve-SPPF)算法 | CA注意力改进版

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1667

Spring事务传播机制详解和 @Transactional 失效情况原因及解决方法(IT枫斗者)

事务的传播,是A方法调用B方法并将事务传递给它。事务的转播机制主要针对而言,控制它是否被传播或者被怎样传播。传播级别一般不需要定义,默认就是PROPAGATION_REQUIRED,除非在嵌套事务的情况。上述描述表格的描述还是比较抽象,下面我们使用一个例子来说明这个传播机制。

IT枫斗者的博客 801

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

事务失效场景的一种情况和解决方法

同一业务类中,一个事务方法调用了本类的方法,可能导致事务失效,因为调用者是this,并不是代理对象。把被调用的事务方法抽取到另个业务类中,在需要调用的业务类中,注入另个业务类的代理对象,完成调用。方案二:让当前项目配置允许bean的循环调用依赖。事务问题:事务失效场景。

heima_xzq的博客 235

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Spring事务传播机制详解和 @Transactional 失效情况原因及解决方法

Spring事务传播机制详解和 @Transactional 失效情况原因及解决方法

lendsomething的博客 1635

spring事务管理器的作用_Spring事务在哪些情况下失效

阅读文本大概需要3分钟。0x01:如果数据库不支持事务,则失效 因为事务是作用于数据库。例如使用MySQL且引擎是MyISAM,则事务会不起作用,因为MyISAM引擎本身不支持事务;如果改成InnoDB,则可以。0x02:Service类没有被Spring管理 因为Spring的事务是基于AOP,所以如果Service类没有被Spring管理,变成一个Spring ...

weixin_39968128的博客 140

Spring事务失效的情况有哪些

方法,Spring 不会通过代理拦截,事务不会生效。如果事务方法的传播行为(Propagation)被。Spring 事务管理依赖于。Spring 事务是基于。,它只能代理 public。机制实现的,如果你在。,事务可能不会生效。

无名小秃瓢的博客 963

SpringBoot事务失效?别急,看看你哪一步错了!

Spring Boot 中事务失效的场景有很多 🤯,需要仔细检查代码和配置 👀,才能找到问题所在。

qq_56158663的博客 1630

事务失效的几种场景,如何解决(详细)?

事务失效的几种场景,如何解决事务失效?

森林之王的博客 885

Spring事务this自调用的理解误区?真的会让事务失效吗?

我们经常谈到Spring事务失效会有多种场景导致:可参考我另外一篇文章一文清晰讲解@Transactional 注解失效场景@Transactional 应用在非 public 修饰的方法上@Transactional 注解属性 propagation 设置错误@Transactional 注解属性 rollbackFor 设置错误同一个类中方法调用,导致@Transactional失效异常被你的 catch“吃了”导致@Transactional失效数据库引擎不支持事务。

Apple_Boy的博客 6634

Spring事务失效的8种情况

Spring事务失效的8种情况 总结: 1、数据库引擎不支持事务 从 MySQL 5.5.5 开始的默认存储引擎是:InnoDB,之前默认的都是:MyISAM,所以这点要值得注意,底层引擎不支持事务再怎么搞都是白搭。 2、没有被 Spring 管理 // @Service public class OrderServiceImpl implements OrderService { @Transactional public void updateOrder(Order order) {

weixin_43564627的博客 1万+

Mysql中事务失效的几种情况及解决方案总结(一)

最近在工作中遇到一个问题:在对订单做处理的时候,原本所有的业务都在一个事务中,可操作结果是只有订单信息后续的所有操作都没有,经过排查确定是mysql的事务没有生效,所以就总结下事务失效的几种情况 一、mysql存储引擎引起的事务失效(一般不会遇到,目前用的mysql版本都在5.7+了) mysql有多种存储引擎,有些版本(mysql5.5.5以前默认是MyISAM,mysql5.5.5以后默认是InnoDB)安装时默认的存储引擎是MyISAM,而MyISAM存储引擎是不支持事务处理的,所以才导致了项目中的某

m0_43584016的博客 5124

mysql 事务 无效_Mysql中事务失效的几种情况及解决方案总结(一)

欢迎访问个人博客 德鲁大叔撸代码最近在工作中遇到一个问题:在对订单做处理的时候,原本所有的业务都在一个事务中,可操作结果是只有订单信息后续的所有操作都没有,经过排查确定是mysql的事务没有生效,所以就总结下事务失效的几种情况一、mysql存储引擎引起的事务失效(一般不会遇到,目前用的mysql版本都在5.7+了)mysql有多种存储引擎,有些版本(mysql5.5.5以前默认是MyISAM,my...

weixin_39602280的博客 2162

spring-- 事务失效原因及多线程事务失效解决方案

在创建一个异步线程之后,可以手动的往嵌套方法的Tread Local中将外层事务connection对象存入,那么嵌套方法就可以从自己的Thread Local中拿到外层事务的connection了,这样方法和嵌套方法用的就是同一个事务了。然后去执行方法,从而执行数据库操作,然后再执行嵌套方法,然后再嵌套方法的代理对象,就可以拿到外层事务的Thread Local中connection对象,从而执行方法,嵌套方法发现ThreadLocal中有值,他不会提交事务,而是统一的交给外层事务进行提交)

m0_73856804的博客 1462

spring事务在哪些情况下会失效

throw new RuntimeException("模拟异常");throw new RuntimeException("模拟异常");throw new Exception("检查异常");throw new Exception("检查异常");// 这里会开启新事务,methodA 的事务不会影响这里。// ❌ 事务失效 - 异常被捕获,没有重新抛出。// ❌ 事务失效 - 自调用。// ❌ 事务失效 - static 方法无法被代理。// ❌ 事务失效 - final 方法无法被代理。

jkl12345669的博客 642
上一篇: spring事务的传播行为详细理解
下一篇: spring中的配置文件导入多个bean.xml文件,有id相同的bean
Hi@Sunshine
博客等级 码龄9年 49粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值