news 2026/4/23 7:55:30

在 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/23 7:52:12

5个最火AI绘画镜像推荐:Z-Image开箱即用,10元全试遍

5个最火AI绘画镜像推荐&#xff1a;Z-Image开箱即用&#xff0c;10元全试遍 引言&#xff1a;AI绘画新手的福音 作为一名文科生&#xff0c;当你面对GitHub上几十个AI绘画模型时&#xff0c;是不是感觉像走进了一家全是外文菜单的餐厅&#xff1f;那些满屏的命令行教程&#…

作者头像 李华
网站建设 2026/4/23 1:07:11

AI手势识别与追踪硬件选型建议:摄像头参数匹配

AI手势识别与追踪硬件选型建议&#xff1a;摄像头参数匹配 1. 引言&#xff1a;AI 手势识别与追踪的现实需求 随着人机交互技术的不断演进&#xff0c;非接触式控制正逐步成为智能设备的重要入口。从智能家居到车载系统&#xff0c;从虚拟现实到工业控制&#xff0c;AI手势识…

作者头像 李华
网站建设 2026/4/23 7:56:29

AutoDock Vina分子对接完全指南:从入门到实战的5个关键步骤

AutoDock Vina分子对接完全指南&#xff1a;从入门到实战的5个关键步骤 【免费下载链接】AutoDock-Vina AutoDock Vina 项目地址: https://gitcode.com/gh_mirrors/au/AutoDock-Vina AutoDock Vina作为分子对接领域的明星工具&#xff0c;以其快速的计算速度和出色的准确…

作者头像 李华
网站建设 2026/4/23 7:52:25

ComfyUI IPAdapter模型加载故障的终极解决方案

ComfyUI IPAdapter模型加载故障的终极解决方案 【免费下载链接】ComfyUI_IPAdapter_plus 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI_IPAdapter_plus &#x1f680; 在使用ComfyUI IPAdapter进行AI图像生成时&#xff0c;你是否经常遇到模型加载失败的问题&…

作者头像 李华
网站建设 2026/4/23 9:19:41

零基础玩转HY-MT1.5-1.8B:手把手教你搭建AI翻译平台

零基础玩转HY-MT1.5-1.8B&#xff1a;手把手教你搭建AI翻译平台 1. 引言 在全球化交流日益频繁的今天&#xff0c;高质量、低延迟的机器翻译已成为智能应用的核心能力之一。腾讯近期开源了混元翻译大模型1.5版本&#xff08;HY-MT1.5&#xff09;&#xff0c;其中 HY-MT1.5-1…

作者头像 李华