发布时间:2026/6/30 14:00:29
@Transactional注解
Transactional注解一、 核心工作原理二、 关键属性详解三、 常见失效场景与避坑指南四、 总结建议Transactional是 Spring 框架中实现声明式事务管理的核心注解。它通过 AOP面向切面编程动态代理机制将事务的开启、提交、回滚逻辑从业务代码中剥离极大简化了开发。一、 核心工作原理Spring 在运行时为标注了Transactional的 Bean 创建代理对象。方法调用前代理对象拦截请求根据配置获取或创建事务。方法执行中执行业务逻辑。方法结束后若无异常则提交事务若抛出指定异常则回滚事务。注意默认情况下Spring 仅对public方法生效且自调用类内部方法互调会导致事务失效因为绕过了代理对象。二、 关键属性详解propagation传播行为决定当前方法被另一个事务方法调用时事务如何传播。默认值为REQUIRED。传播行为含义场景示例REQUIRED如果当前存在事务则加入否则新建一个。大多数业务场景保证操作在同一事务中。REQUIRES_NEW无论当前是否有事务都新建一个独立事务。挂起当前事务。记录日志、审计信息即使主事务回滚日志也要保存。NESTED如果当前存在事务则在嵌套事务内执行保存点机制否则新建。部分成功部分失败的场景内部回滚不影响外部。SUPPORTS支持当前事务如果当前没有事务就以非事务方式执行。查询操作有事务就用没有也行。NOT_SUPPORTED以非事务方式执行如果当前存在事务则挂起当前事务。高性能非 DB 操作。MANDATORY使用当前的事务如果当前没有事务就抛出异常。强制要求必须在事务环境中运行。NEVER以非事务方式执行如果当前存在事务则抛出异常。严禁在事务中运行。isolation隔离级别指定事务的隔离级别解决并发问题。默认值为数据库默认级别如 MySQL 为READ_COMMITTED或REPEATABLE_READ取决于配置。DEFAULT使用底层数据库的默认隔离级别。READ_UNCOMMITTED读未提交。READ_COMMITTED读已提交。REPEATABLE_READ可重复读。SERIALIZABLE串行化。rollbackFor / noRollbackFor回滚规则决定哪些异常触发回滚。默认规则只有RuntimeException运行时异常和Error会触发回滚检查型异常Checked Exception如 IOException不会回滚。最佳实践通常设置rollbackFor Exception.class确保所有异常都回滚避免数据不一致。Transactional(rollbackForException.class)publicvoidupdateData(){...}timeout超时时间事务运行的最大秒数。超过该时间未提交自动回滚。防止长事务占用数据库连接资源。Transactional(timeout30)// 30秒超时readOnly只读优化提示数据库和 Hibernate 该事务只进行读取操作。作用Hibernate 可以跳过脏检查数据库可能优化查询计划。注意如果在只读事务中执行写操作通常会抛出异常。Transactional(readOnlytrue)publicListUserfindAll(){...}三、 常见失效场景与避坑指南自调用失效现象类 A 的方法 a() 调用同类的方法 b()b() 上有Transactional但事务不生效。原因Spring 事务基于代理自调用直接访问目标对象绕过了代理类的事务增强逻辑。解决注入自身 Bean 调用。使用AopContext.currentProxy()获取代理对象调用。将方法拆分到不同的 Service 类中。异常被吞没现象方法内部try-catch捕获了异常但未抛出事务不回滚。原因Spring 只有在异常抛出到代理层时才能感知并回滚。解决在 catch 块中手动抛出RuntimeException或调用TransactionAspectSupport.currentTransactionStatus().setRollbackOnly()。方法非 public现象注解在private、protected或默认权限方法上。原因Spring 默认只对public方法创建事务代理。解决将方法改为public。数据库引擎不支持现象使用 MySQL MyISAM 引擎。原因MyISAM 不支持事务。解决确保表引擎为 InnoDB。四、 总结建议默认配置够用吗 对于大多数 CRUD 场景默认的REQUIRED传播行为和运行时异常回滚规则是足够的。何时需要自定义涉及多数据源或复杂事务嵌套时需仔细选择propagation。高并发查询场景添加readOnly true提升性能。关键业务数据更新务必设置rollbackFor Exception.class。分布式场景Transactional仅适用于单体应用或单数据库场景。微服务架构下需使用 Seata、TCC 或消息最终一致性方案。

相关新闻

学习通Windows原生客户端底层实现与高负载场景稳定性分析
2026/6/30 14:00:29

学习通Windows原生客户端底层实现与高负载场景稳定性分析

一、问题的起点 学习通在Windows平台有两个运行路径:Microsoft Store原生客户端和安卓模拟器方案。从CSDN的技术视角来看,这个选择不是一个"哪个好用"的主观问题,而是一个运行时架构差异导致的稳定性问题。 本文从内存模型、渲染…

阅读更多
wvp-GB28181-pro深度解析:基于Java的国标视频监控平台架构设计与高并发实现
2026/6/30 14:00:29

wvp-GB28181-pro深度解析:基于Java的国标视频监控平台架构设计与高并发实现

wvp-GB28181-pro深度解析:基于Java的国标视频监控平台架构设计与高并发实现 【免费下载链接】wvp-GB28181-pro 基于GB28181-2016、部标808、部标1078标准实现的开箱即用的网络视频平台。自带管理页面,支持NAT穿透,支持海康、大华、宇视等品牌…

阅读更多
EMI滤波电感五大核心参数完整选型
2026/6/30 14:00:29

EMI滤波电感五大核心参数完整选型

多数硬件工程师筛选滤波电感时,习惯仅以标称电感量作为选型依据,殊不知电感量只是基础指标,直流电阻 DCR、饱和电流 Isat、自谐振频率 SRF、阻抗频率特性、额定温升电流五大参数,直接决定滤波电路长期稳定性与 EMI 抑制上限&#…

阅读更多
Fable 5阉割 vs Sol切脑,谁更狠 - 微元算力(weytoken)
2026/6/30 14:00:29

Fable 5阉割 vs Sol切脑,谁更狠 - 微元算力(weytoken)

摘要:2026年6月,Fable 5发布72小时后全球禁用,GPT-5.6 Sol被限制在"获批名单"——两大最强模型同时被安全护栏摁住,但路径截然不同。Anthropic采用"动态降级":所有人用同一模型,触发护…

阅读更多
@Transactional注解
2026/6/30 14:00:29

@Transactional注解

Transactional注解一、 核心工作原理二、 关键属性详解三、 常见失效场景与避坑指南四、 总结建议Transactional 是 Spring 框架中实现声明式事务管理的核心注解。它通过 AOP(面向切面编程)动态代理机制,将事务的开启、提交、回滚逻辑从业务代…

阅读更多
学习通Windows原生客户端底层实现与高负载场景稳定性分析
2026/6/30 14:00:29

学习通Windows原生客户端底层实现与高负载场景稳定性分析

一、问题的起点 学习通在Windows平台有两个运行路径:Microsoft Store原生客户端和安卓模拟器方案。从CSDN的技术视角来看,这个选择不是一个"哪个好用"的主观问题,而是一个运行时架构差异导致的稳定性问题。 本文从内存模型、渲染…

阅读更多
wvp-GB28181-pro深度解析:基于Java的国标视频监控平台架构设计与高并发实现
2026/6/30 14:00:29

wvp-GB28181-pro深度解析:基于Java的国标视频监控平台架构设计与高并发实现

wvp-GB28181-pro深度解析:基于Java的国标视频监控平台架构设计与高并发实现 【免费下载链接】wvp-GB28181-pro 基于GB28181-2016、部标808、部标1078标准实现的开箱即用的网络视频平台。自带管理页面,支持NAT穿透,支持海康、大华、宇视等品牌…

阅读更多
EMI滤波电感五大核心参数完整选型
2026/6/30 14:00:29

EMI滤波电感五大核心参数完整选型

多数硬件工程师筛选滤波电感时,习惯仅以标称电感量作为选型依据,殊不知电感量只是基础指标,直流电阻 DCR、饱和电流 Isat、自谐振频率 SRF、阻抗频率特性、额定温升电流五大参数,直接决定滤波电路长期稳定性与 EMI 抑制上限&#…

阅读更多
LeetCode 5. 最长回文子串——中心扩展法彻底讲透
2026/6/30 13:00:29

LeetCode 5. 最长回文子串——中心扩展法彻底讲透

LeetCode 5. 最长回文子串——中心扩展法彻底讲透 一、题目描述 给定一个字符串 s,找到其中最长的回文子串,并返回这个子串。 示例: 输入:s "babad" 输出:"bab" 解释:"aba"…

阅读更多
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告
2026/6/28 0:00:11

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

阅读更多
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?
2026/6/28 0:00:11

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

阅读更多
如何在1分钟内为Windows安装苹果USB网络共享驱动:完整解决方案
2026/6/30 0:00:27

如何在1分钟内为Windows安装苹果USB网络共享驱动:完整解决方案

如何在1分钟内为Windows安装苹果USB网络共享驱动:完整解决方案 【免费下载链接】Apple-Mobile-Drivers-Installer Powershell script to easily install Apple USB and Mobile Device Ethernet (USB Tethering) drivers on Windows! 项目地址: https://gitcode.co…

阅读更多
AScript异步执行与await关键字
2026/6/30 0:00:27

AScript异步执行与await关键字

、异步解析执行 AScript提供了 Script.EvalAsync 异步方法,异步执行脚本,可设置 CancellationToken 参数。 AScript执行模式有解析执行和编译执行两种模式,这两种模式下的异步执行又有所不同: 1)解析执行模式&#…

阅读更多
AI时代真的风水轮流转,前段时间最火的还是Claude Code,转眼间Codex就火得一塌糊涂。Codex是由OpenAI 推出的AI智能体。
2026/6/30 0:00:27

AI时代真的风水轮流转,前段时间最火的还是Claude Code,转眼间Codex就火得一塌糊涂。Codex是由OpenAI 推出的AI智能体。

它不仅能回答问题,编写代码,还能读取电脑本地文件,修改项目,浏览网页,调用外部工具,自动化执行任务,操作浏览器甚至桌面应用。 也是早早的就给身边不是程序员的亲朋好友安利了,都是用…

阅读更多
GIT修改用户名
2026/6/28 5:47:46

GIT修改用户名

在GIT中修改用户名可按以下步骤操作: 查看当前git的用户名,使用命令git config --list或git config user.name。修改git用户名,使用命令git config --global user.name "xxx(新的用户名)",将其中…

阅读更多
Win11Debloat:让你的Windows系统重获新生的终极优化工具
2026/6/30 14:19:49

Win11Debloat:让你的Windows系统重获新生的终极优化工具

Win11Debloat:让你的Windows系统重获新生的终极优化工具 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and …

阅读更多
技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践
2026/6/30 14:19:48

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践

技术深度解析:m4s-converter实现原理与B站缓存视频转换最佳实践 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter m4s-converter是一个…

阅读更多