news 2026/2/7 12:27:33

在 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/2/6 7:24:03

LLOneBot QQ机器人终极配置指南:从零到精通完整教程

LLOneBot QQ机器人终极配置指南&#xff1a;从零到精通完整教程 【免费下载链接】LLOneBot 使你的NTQQ支持OneBot11协议进行QQ机器人开发 项目地址: https://gitcode.com/gh_mirrors/ll/LLOneBot 在当今智能化时代&#xff0c;QQ机器人已成为社群管理、自动客服、信息推…

作者头像 李华
网站建设 2026/2/7 2:22:53

TabPFN终极指南:如何快速解决表格数据预测难题

TabPFN终极指南&#xff1a;如何快速解决表格数据预测难题 【免费下载链接】TabPFN Official implementation of the TabPFN paper (https://arxiv.org/abs/2207.01848) and the tabpfn package. 项目地址: https://gitcode.com/gh_mirrors/ta/TabPFN TabPFN作为一款革命…

作者头像 李华
网站建设 2026/2/5 21:19:30

5分钟掌握虚拟控制器:彻底解决Windows掌机游戏兼容性难题

5分钟掌握虚拟控制器&#xff1a;彻底解决Windows掌机游戏兼容性难题 【免费下载链接】HandheldCompanion ControllerService 项目地址: https://gitcode.com/gh_mirrors/ha/HandheldCompanion 在现代Windows掌机游戏中&#xff0c;你是否曾因控制器识别问题而困扰&…

作者头像 李华
网站建设 2026/2/7 0:00:02

施工安全AI监控:17点骨骼检测云端API即时调用

施工安全AI监控&#xff1a;17点骨骼检测云端API即时调用 引言 在建筑工地现场&#xff0c;安全员每天最头疼的就是如何及时发现工人危险动作——比如高空作业不系安全带、违规攀爬脚手架等。传统人工监控不仅效率低&#xff0c;还容易因疲劳导致漏检。现在通过AI骨骼关键点检…

作者头像 李华
网站建设 2026/2/7 10:40:39

5个最火AI姿态检测镜像推荐:0配置开箱即用,10块钱全试遍

5个最火AI姿态检测镜像推荐&#xff1a;0配置开箱即用&#xff0c;10块钱全试遍 1. 为什么你需要这些姿态检测镜像&#xff1f; 作为AI课程的初学者&#xff0c;特别是文科转专业的同学&#xff0c;第一次接触姿态检测作业时往往会遇到三个典型困扰&#xff1a; 选择困难&am…

作者头像 李华