周振林 周振林
首页
  • 前端文章

    • HTML
    • CSS
    • Tailwind CSS (opens new window)
    • JavaScript
    • Vue3
    • 其他
  • 规范
  • Spring
  • 安装教程
  • 其他教程
  • 归真医学
  • 常用药材
  • 学习笔记
  • 经方学习心得
  • 基础
  • 虚拟化
  • Docker
  • OpenStack
  • 心情杂货
关于
收藏

周振林

IT界的小学生
首页
  • 前端文章

    • HTML
    • CSS
    • Tailwind CSS (opens new window)
    • JavaScript
    • Vue3
    • 其他
  • 规范
  • Spring
  • 安装教程
  • 其他教程
  • 归真医学
  • 常用药材
  • 学习笔记
  • 经方学习心得
  • 基础
  • 虚拟化
  • Docker
  • OpenStack
  • 心情杂货
关于
收藏
  • 规范

  • Spring

    • Spring介绍
    • Spring IoC
    • Spring AOP
    • SpringBoot基础
    • SpringBoot自动配置原理
    • SpringBoot其他功能
    • SpringBoot自定义Start
    • SpringBoot 常用注解
    • SpringBoot Conditional注解
    • SpringBoot 组件注入方式
    • SpringBoot 组件Bean生命周期
    • SpringBoot过滤器
    • SpringBoot拦截器
    • SpringBoot异常
    • SpringBoot事务
      • 依赖start和依赖BOM区别
      • Thymeleaf教程
      • SpringBoot集成Modbus实现设备
      • Maven教程
      • Tree工具类,轻松搞定树结构
    • 安装教程

    • 其他教程

    • 后端
    • Spring
    周振林
    2025-09-18
    目录

    SpringBoot事务

    # @Transactional

    @Transactional 是 Spring 的事务管理注解,用来声明某个方法或类运行时需要事务支持。

    注意事项

    • 只能作用在 public 方法(Spring AOP 的限制)。
    • 同类方法内部调用事务不会生效(需要代理调用)。
    • 默认只回滚运行时异常(RuntimeException),检查型异常要手动指定 rollbackFor。

    # @Transactional核心属性

    属性 作用 默认值
    isolation 事务隔离级别(解决并发时数据一致性问题) 数据库默认
    propagation 事务传播行为(方法调用时事务如何传播) REQUIRED
    rollbackFor 指定遇到哪些异常回滚 运行时异常
    noRollbackFor 指定遇到哪些异常不回滚 空
    timeout 事务超时时间(秒) -1(不超时)
    readOnly 是否只读事务(提高查询性能) false

    rollbackFor和noRollbackFor 异常:

    • 运行时异常(unchecked exception【非受检异常】)
    • 编译时异常(checked exception【受检异常】) -【回滚的默认机制】
      • 运行时异常:回滚
      • 编译时异常:不回滚

    rollbackFor【可以指定哪些异常需要回滚】 -【回滚 = 运行时异常(默认) + 指定回滚异常】

    noRollbackFor(同 noRollbackForClassName):指明哪些异常不需要回滚。

    • 【不回滚 = 编译时异常(默认) + 指定不回滚异常】

    # 隔离级别isolation

    读未提交(Read Uncommitted)

    • 事务可以读取未被提交的数据,易产生脏读、不可重复读和幻读等问题

    读已提交(Read Committed)

    • 事务只能读取已经提交的数据,可避免脏读,但可能引发不可重复读和幻读。

    可重复读(Repeatable Read)

    • 同一事务期间多次重复读取的数据相同。避免脏读和不可重复读,但仍有幻读的问题

    串行化(Serializable)

    • 最高隔离级别,完全禁止了并发,只允许一个事务执行完毕之后才能执行另一个事务
    级别 脏读 不可重复读 幻读
    读未提交 √ √ √
    读已提交 × √ √
    可重复读 × × √
    串行化 × × ×

    # 传播行为propagation

    定义:当一个事务方法被另一个事务方法调用时,事务该以何种状态存在?事务属性该如何传播下去?

    传播行为 说明
    REQUIRED 支持当前事务,当前有事务就加入,没有就新建一个(默认值)
    REQUIRES_NEW 支持当前事务,总是新建事务,挂起原来的
    SUPPORTS 支持当前事务,有事务就加入,没有就不用事务
    NOT_SUPPORTED 非事务执行,不支持事务,如果存在当前事务则挂起原来的
    NEVER 非事务执行,不支持事务,如果存在当前事务则报错
    MANDATORY 支持当前事务,如果不存在则抛出异常
    NESTED 支持当前事务,如果当前存在事务,则在嵌套事务中执行,否则像 REQUIRED 一样运行

    说明 当前事务指的的是父方法的事务

    Last Updated: 2025/10/22, 08:25:28
    SpringBoot异常
    依赖start和依赖BOM区别

    ← SpringBoot异常 依赖start和依赖BOM区别→

    最近更新
    01
    肺
    10-24
    02
    脾胃
    10-24
    03
    肝
    10-24
    更多文章>
    Copyright © 2019-2025 鲁ICP备19032096号-1
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式