跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
Javajava

Spring 事务管理核心:@Transactional 注解与传播机制详解

Spring 事务通过声明式方式简化数据库操作,确保 ACID 特性。@Transactional 注解支持类与方法级配置,默认对 public 方法生效。回滚策略默认捕获运行时异常,可通过 rollbackFor 扩展至受检异常。隔离级别控制并发读写可见性,传播行为定义嵌套调用时的事务边界,如 REQUIRED 加入现有事务,REQUIRES_NEW 挂起当前新建事务。掌握这些机制是构建可靠后端服务的基础。

NodeJser发布于 2026/3/25更新于 2026/5/77 浏览
Spring 事务管理核心:@Transactional 注解与传播机制详解

概述

Spring 事务管理是确保数据库操作原子性、一致性、隔离性和持久性(ACID)的核心机制。通过声明式或编程式方式管理事务,支持多种事务传播行为和隔离级别。相较于编程式事务,声明式事务通过 @Transactional 注解实现,无需手动编写事务代码。

@Transactional 注解

该注解提供声明式事务管理,简化了应用程序中管理数据库事务的流程。开发者只需在方法或类上添加此注解,Spring 框架就会自动处理事务的开启、提交和回滚。

使用级别:

  • 类级别: 为类中所有 public 方法添加注解。
  • 方法级别: 默认仅对 public 方法生效。
@RequestMapping("/test")
@RestController
@Slf4j
public class TestController {
    private final UserService userService;

    @Autowired
    public TestController(UserService userService) {
        this.userService = userService;
    }

    @Transactional
    @RequestMapping("/test1")
    public String test1(String userName, String password) {
        UserInfo userInfo = new UserInfo();
        userInfo.setUserName(userName);
        userInfo.setPassword(password);
        Integer result = userService.register(userInfo);
        if (result == 1) {
            log.info("test1 注册成功,userName:{},password:{}", userName, password);
        }
        return "注册成功";
    }
}

回滚策略

默认情况下,抛出非受查异常(RuntimeException)或错误(Error)时触发回滚。若需指定其他异常类型,可使用 rollbackFor 属性。

指定回滚类型示例:

@Transactional(rollbackFor = Exception.class)
@RequestMapping("/test4")
public String test4(String userName, String password) throws IOException {
    // ... 业务逻辑 ...
    throw new IOException();
}

当抛出受检异常(如 IOException)而未配置 rollbackFor 时,事务不会回滚;配置后则正常回滚。反之,抛出 RuntimeException 时无论是否配置均会回滚。

隔离级别

用于指定事务的隔离级别,可选值包括:

  • Isolation.DEFAULT:使用底层数据库默认的隔离级别。
  • Isolation.READ_UNCOMMITTED:读未提交。
  • Isolation.READ_COMMITTED:读已提交。
  • Isolation.REPEATABLE_READ:可重复读。
  • Isolation.SERIALIZABLE:串行化。

每种隔离级别的具体效果取决于底层数据库的实现,通常建议遵循数据库默认设置,除非有明确的并发控制需求。

传播行为

定义当前事务方法被另一个事务方法调用时,事务应如何传播。Spring 提供了 7 种传播行为,均基于 Propagation 枚举类实现。

  1. Propagation.REQUIRED 默认传播行为。如果当前存在事务,则加入该事务;如果不存在事务,则新建一个事务。

  2. Propagation.SUPPORTS 如果当前存在事务,则加入该事务;如果不存在事务,则以非事务方式执行。

  3. Propagation.MANDATORY 强制要求当前存在事务并加入,否则抛出异常。

  4. Propagation.REQUIRES_NEW 无论当前是否存在事务,都新建一个事务。新事务与当前事务独立,互不干扰。常用于需要记录日志或审计的场景,确保其不受外部事务影响。

  5. Propagation.NOT_SUPPORTED 以非事务方式执行操作,如果当前存在事务,则挂起该事务。

  6. Propagation.NEVER 强制要求当前不能存在事务,否则抛出异常。

  7. Propagation.NESTED 如果当前存在事务,则在嵌套事务中执行;如果不存在事务,则行为与 Propagation.REQUIRED 相同。嵌套事务的回滚不影响外部事务,但外部事务回滚会导致嵌套事务回滚。适用于需要部分回滚的场景。

在实际开发中,理解这些传播行为的差异对于处理复杂的业务逻辑至关重要,特别是涉及跨服务调用或多层方法调用的场景。

目录

  1. 概述
  2. @Transactional 注解
  3. 回滚策略
  4. 隔离级别
  5. 传播行为
  • 💰 8折买阿里云服务器限时8折了解详情
  • GPT-5.5 超高智商模型1元抵1刀ChatGPT中转购买
  • 代充Chatgpt Plus/pro 帐号了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • GitHub 日榜精选:AI 智能体与开发工具趋势
  • 双指针算法详解:三数之和与四数之和
  • 轮腿机器人代码调试与软硬件配置说明
  • 智谱 AI 免费大模型 API 调用教程
  • Claude Code 本地部署与 Copilot 反向代理配置指南
  • 基于.NET的Web API控制器及方法注解属性
  • C++ 类大小计算:内存对齐、虚函数与继承详解
  • OpenClaw 飞书通信端机器人配置指南
  • Gaussian Grouping:在三维场景中分割与编辑任意物体
  • 如何利用 AI 大模型解决实际问题:实战案例与操作指南
  • Neo4j Desktop 2 安装与使用指南
  • TwinRL-VLA:数字孪生驱动的机器人强化学习与真实世界应用
  • UnityMCP+Claude+VSCode 构建 AI 游戏开发环境
  • Java 核心:char、String、StringBuilder 与 StringBuffer 深度解析
  • C/C++ 运行时库概念详解
  • OpenClaw:意外爆红的 AI 助手如何改写开源规则
  • JavaAI 插件关联上下文实战:智能引导与工具箱案例评测
  • 前端WebSocket实战:别再只会用HTTP了
  • 从零开始用 Python 复现 LLaMA 4 MoE 架构
  • GitHub 与 Google 第三方登录 OAuth 配置指南

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online