@Transactional 嵌套,内层抛异常,外层用 try-catch 捕获但实际事务却回滚了

ops/2025/2/23 1:08:49/

1. 内层事务传播行为为 Propagation.REQUIRED 且设置了回滚标记

虽然外层捕获了异常,但内层事务在抛出异常时可能已经标记了整个事务需要回滚。在 Spring 中,当内层事务传播行为为 Propagation.REQUIRED 时,它和外层事务属于同一个逻辑事务。若内层在抛出异常前或者异常处理逻辑中调用了 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly() 方法,那么即使外层捕获了异常,事务也会回滚。

2. 数据库隔离级别和锁机制影响

某些数据库的隔离级别和锁机制可能会导致即使异常被捕获,事务也会回滚。例如,在一些高并发场景下,当内层事务持有锁,并且在异常发生时数据库为了保证数据一致性,强制回滚整个事务。这种情况通常与数据库的具体实现和配置有关。

3. 异常类型与 rollbackFor 配置

如果 @Transactional 注解中配置了 rollbackFor 属性,并且内层抛出的异常类型符合该配置,即使外层捕获了异常,Spring 可能仍然会根据配置决定回滚事务。

4. AOP 代理问题

Spring 的事务管理是基于 AOP 代理实现的。如果代码存在 AOP 代理相关的问题,例如代理配置错误、方法调用不符合 AOP 代理规则等,可能会导致事务行为不符合预期。比如,在同一个类中,非代理方法调用带有 @Transactional 注解的方法,可能会绕过事务代理逻辑,导致事务行为异常。


http://www.ppmy.cn/ops/160372.html

相关文章

Java中JDK、JRE,JVM之间的关系

Java中的JDK、JRE和JVM是三个核心概念,其关系可概括为JDK > JRE > JVM,具体如下: 一、定义与作用 JDK(Java Development Kit) 定义:Java开发工具包,用于开发和编译Java程序。包含内容&…

Web入侵实战分析-常见web攻击类应急处置实验2

场景说明 某天运维人员,发现运维的公司站点被黑页,首页标题被篡改,你获得的信息如下: 操作系统:windows server 2008 R2业务:公司官网网站架构:通过phpstudy运行apache mysqlphp开放端口&…

23种设计模式 - 装饰器模式

模式定义 装饰器模式(Decorator Pattern)是一种结构型设计模式,允许动态地为对象添加新功能,而无需修改其结构。它通过将对象包装在装饰器类的实例中,实现功能的灵活扩展,符合开放/封闭原则。 模式结构 抽…

【物联网】电子电路基础知识

文章目录 一、基本元器件1. 电阻2. 电容3. 电感4. 二极管(1)符号(2)特性(3)实例分析5. 三极管(1)符号(2)开关特性(3)实例6. MOS管(产效应管)(1)符号(2)MOS管极性判定(3)MOS管作为开关(4)MOS管vs三极管7. 门电路(1)与门(2)或门(3)非门二、常用元器件…

DeepSeek底层揭秘——微调

目录 1. 大语言模型微调 2. 核心功能 3. 技术要素 4. 难点挑战暨解决方案 5. 技术路径 6. 应用场景 7. 实际案例 8. 最新研究与技术进展 9. DeepSeek 微调 猫哥说 1. 大语言模型微调 (1) 定义 大语言模型微调(Fine-tuning of Large Language Models&…

”无痕模式“真的无痕?

无痕模式(也称为 隐身模式): 不保存浏览历史:当你在无痕模式下浏览网页时,浏览器不会保存你的浏览历史。这意味着关闭无痕窗口后,其他人查看浏览器时看不到你访问过的网页记录。 不保存Cookies&#xff1a…

【设计模式】【结构型模式】组合模式(Composite)

👋hi,我不是一名外包公司的员工,也不会偷吃茶水间的零食,我的梦想是能写高端CRUD 🔥 2025本人正在沉淀中… 博客更新速度 👍 欢迎点赞、收藏、关注,跟上我的更新节奏 🎵 当你的天空突…

JavaScript 前端面试 1 (数据类型、数据结构)

一:JavaScript中有哪些数据类型?在存储上的差异? JavaScript的数据类型分为两类:基本类型 和 引用类型 两者的区别是存储位置不同 1:基本类型 基本类型有以下六种: Number数字类型,用于表示…