news 2026/5/10 20:29:29

在 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/4/29 17:24:51

MediaPipe Hands实战:构建智能手势交互系统步骤详解

MediaPipe Hands实战&#xff1a;构建智能手势交互系统步骤详解 1. 引言&#xff1a;AI 手势识别与追踪的现实价值 随着人机交互技术的不断演进&#xff0c;基于视觉的手势识别正逐步成为智能设备、虚拟现实、增强现实乃至工业控制中的关键入口。传统触摸或语音交互方式在特定…

作者头像 李华
网站建设 2026/5/10 6:48:02

体验AI姿态检测省钱攻略:云端GPU按需付费,比买显卡省万元

体验AI姿态检测省钱攻略&#xff1a;云端GPU按需付费&#xff0c;比买显卡省万元 1. 为什么自由设计师需要AI姿态检测 作为一名自由设计师&#xff0c;你可能经常需要参考人体姿态来创作插画、设计服装或制作动画。传统方式要么需要雇佣模特&#xff0c;要么花费大量时间搜索…

作者头像 李华
网站建设 2026/5/1 11:19:15

YOLO-World终极指南:快速掌握开放词汇目标检测核心技术

YOLO-World终极指南&#xff1a;快速掌握开放词汇目标检测核心技术 【免费下载链接】YOLO-World 项目地址: https://gitcode.com/gh_mirrors/yo/YOLO-World 想要体验无需预定义类别就能检测任意物体的强大能力吗&#xff1f;YOLO-World作为革命性的开放词汇目标检测框架…

作者头像 李华
网站建设 2026/5/4 12:13:48

Touch屏边缘漂移问题成因探究:系统分析硬件缺陷

触摸屏边缘漂移问题的深层解析&#xff1a;从电场畸变到系统级抗干扰设计你有没有遇到过这种情况——在手机屏幕边缘写字时&#xff0c;笔迹总是“自己跑偏”&#xff1f;或者玩游戏时手指明明没动&#xff0c;角色却持续滑动&#xff1f;这类现象被称为触摸屏边缘漂移&#xf…

作者头像 李华