news 2026/3/4 16:10:37

在 Spring 中,当你在方法上使用 @Transactional 注解时,事务的开启、数据库操作的执行以及事务的提交/回滚,遵循的流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
在 Spring 中,当你在方法上使用 @Transactional 注解时,事务的开启、数据库操作的执行以及事务的提交/回滚,遵循的流程

在 Spring 中,当你在方法上使用@Transactional注解时,事务的开启、数据库操作的执行以及事务的提交/回滚,遵循以下流程


✅ 正确的执行顺序是:

  1. 方法调用前:Spring 通过代理机制开启数据库事务(即向数据库发送BEGIN或类似指令);
  2. 方法执行中:你的业务代码(包括对数据库的操作,如INSERTUPDATE等)会立即执行并写入数据库,但这些更改处于“未提交”状态(对其他事务不可见,取决于隔离级别);
  3. 方法执行成功结束后:Spring提交事务(发送COMMIT),此时数据才真正持久化并对其他事务可见;
  4. 方法抛出异常且满足回滚条件时:Spring回滚事务(发送ROLLBACK),所有在该方法中执行的数据库操作全部撤销。

📌 关键澄清:

不是“等方法执行完才进库”
而是“方法执行过程中就进库了,但未提交;方法成功结束才提交”

也就是说:

  • 数据库的写操作(如 INSERT)在方法内部执行时就已经发给数据库了
  • 但由于事务未提交,这些数据处于“临时”状态(在 InnoDB 等支持事务的引擎中,会记录在 Undo Log 中);
  • 只有事务提交后,这些更改才对外生效。

🔍 举个例子:

@Transactional public void transfer(Long from, Long to, BigDecimal amount) { accountDao.deduct(from, amount); // ← 这行执行时,SQL 已发给数据库,但未 COMMIT accountDao.add(to, amount); // ← 同上 // 如果这里抛出 RuntimeException if (amount.compareTo(BigDecimal.ZERO) <= 0) { throw new IllegalArgumentException("金额必须大于0"); } }
  • 假设deductadd都执行成功,但在最后检查时抛出异常;
  • 那么两个 SQL 虽然都已执行,但会被回滚,数据库最终无变化;
  • 如果没有异常,方法正常结束,Spring 才执行COMMIT,数据正式落盘。

⚠️ 注意事项:

  1. 事务由 Spring 代理控制
    事务的开启和提交是由 Spring 的 AOP 代理在方法调用前后自动插入的逻辑完成的 。
  2. 数据库必须支持事务
    如 MySQL 的 InnoDB 引擎。MyISAM 不支持事务,即使加了@Transactional也无效。
  3. 只对 public 方法有效
    因为 Spring 默认使用代理模式,非 public 方法无法被代理拦截 。
  4. 默认只对 RuntimeException 回滚
    检查型异常(如IOException)不会触发回滚,除非显式配置rollbackFor

✅ 总结:

表格

阶段行为
方法开始前Spring 开启事务(BEGIN
方法执行中SQL 语句立即执行,但处于未提交状态
方法成功结束Spring 提交事务(COMMIT)→ 数据真正入库
方法抛出异常Spring 回滚事务(ROLLBACK)→ 数据撤销

所以答案是:先进库(执行 SQL),但不提交;等方法执行完再决定提交或回滚

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/1 16:07:25

模型内置于库中意味着什么?AI手势识别架构解析

模型内置于库中意味着什么&#xff1f;AI手势识别架构解析 1. AI 手势识别与追踪&#xff1a;从感知到交互的桥梁 在人机交互日益智能化的今天&#xff0c;手势识别正成为连接人类意图与数字系统的核心技术之一。不同于传统的触控或语音输入&#xff0c;手势识别通过视觉感知…

作者头像 李华
网站建设 2026/3/3 18:48:06

不用联网也能用!离线AI手势识别部署教程

不用联网也能用&#xff01;离线AI手势识别部署教程 1. 引言&#xff1a;为什么需要离线AI手势识别&#xff1f; 随着人机交互技术的不断发展&#xff0c;AI手势识别正逐步从实验室走向消费级应用。无论是智能车载系统、AR/VR设备&#xff0c;还是智能家居控制&#xff0c;手…

作者头像 李华
网站建设 2026/3/4 7:06:40

原神私人服务器搭建终极指南:5分钟快速创建专属游戏世界

原神私人服务器搭建终极指南&#xff1a;5分钟快速创建专属游戏世界 【免费下载链接】KCN-GenshinServer 基于GC制作的原神一键GUI多功能服务端。 项目地址: https://gitcode.com/gh_mirrors/kc/KCN-GenshinServer 还在为复杂的服务器配置头疼不已&#xff1f;想和好友在…

作者头像 李华
网站建设 2026/2/25 22:40:34

Z-Image商业案例解析:云端GPU低成本验证

Z-Image商业案例解析&#xff1a;云端GPU低成本验证 引言 作为一名创业者&#xff0c;当你考虑将AI图像生成技术融入商业场景时&#xff0c;最大的挑战往往是前期投入成本与效果验证之间的平衡。传统商业级AI绘图模型通常需要24GB甚至48GB显存的高端显卡&#xff0c;这让很多…

作者头像 李华
网站建设 2026/3/4 2:00:18

UModel终极指南:专业级虚幻引擎资源提取完整教程

UModel终极指南&#xff1a;专业级虚幻引擎资源提取完整教程 【免费下载链接】UEViewer Viewer and exporter for Unreal Engine 1-4 assets (UE Viewer). 项目地址: https://gitcode.com/gh_mirrors/ue/UEViewer 掌握虚幻引擎资源提取技术是现代游戏开发者的必备技能&a…

作者头像 李华
网站建设 2026/2/25 9:09:37

AI手势识别彩虹骨骼版上线:5种手指颜色区分实战案例

AI手势识别彩虹骨骼版上线&#xff1a;5种手指颜色区分实战案例 1. 引言&#xff1a;AI 手势识别与人机交互新范式 随着人工智能在计算机视觉领域的持续突破&#xff0c;AI手势识别正逐步从实验室走向消费级应用。无论是智能穿戴设备、虚拟现实交互&#xff0c;还是无接触控制…

作者头像 李华