Bohr-L Bohr-L
首页
技术
常见面试题
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

刘博

I'm a slow walker, But I never walk backwards.
首页
技术
常见面试题
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 数据处理与存储类

  • Spring 生态类

    • SpringBoot 自动装配的原理
    • SpringMVC 的优点和缺点
    • Spring AOP 在什么场景下会失效?
    • Spring 是如何管理事务的,事务管理机制
      • 声明式事务的实现原理(AOP)
    • 缓存问题类

    • 多线程类

    • JVM 类

    • MySQL 类

    • Java 8 + 特性类

    • 其他技术类

    • 常见面试题
    • Spring 生态类
    刘博
    2025-12-28
    目录

    Spring 是如何管理事务的,事务管理机制

    Spring 事务管理的核心是 “统一封装不同数据源的事务操作,提供声明式和编程式两种方式”,底层依赖 AOP 实现,机制如下:

    # 1. 事务管理的两种方式

    • 编程式事务:手动通过TransactionTemplate或PlatformTransactionManager控制事务,灵活性高,但代码侵入性强。

    示例(TransactionTemplate):

    @Autowired
    private TransactionTemplate transactionTemplate;
    public void saveUser(User user) {
        transactionTemplate.execute(status -> {
            try {
                userDAO.insert(user);
                return true;
            } catch (Exception e) {
                status.setRollbackOnly(); // 手动回滚
                return false;
            }
        });
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    • 声明式事务:通过@Transactional注解实现,无需手动写事务控制代码,底层由 AOP 自动植入事务逻辑(开启、提交、回滚),代码侵入性低,是 Spring 推荐的方式。

    示例 :

    java 运行

    @Service
    public class UserService {
        @Autowired
        private UserDAO userDAO;
        @Transactional(rollbackFor = Exception.class) // 声明事务,异常回滚
        public void saveUser(User user) {
            userDAO.insert(user);
            // 若抛出Exception,事务自动回滚
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

    # 2. 核心组件

    • PlatformTransactionManager:事务管理器接口,是 Spring 事务管理的核心,不同数据源对应不同实现:

      • DataSourceTransactionManager:用于 JDBC/MyBatis(基于关系型数据库);

      • HibernateTransactionManager:用于 Hibernate;

      • JpaTransactionManager:用于 JPA。

        作用:提供

        getTransaction()
        
        1

        (获取事务)、

        commit()
        
        1

        (提交事务)、

        rollback()
        
        1

        (回滚事务)方法。

    • TransactionDefinition:事务定义接口,定义事务的属性:

      • 隔离级别(Isolation):如READ_COMMITTED、REPEATABLE_READ;
      • 传播行为(Propagation):如REQUIRED(默认,若有事务则加入,无则新建)、REQUIRES_NEW(新建事务,暂停当前事务);
      • 超时时间(Timeout):事务超时自动回滚(默认 - 1,无超时);
      • 只读属性(ReadOnly):若为 true,事务仅执行查询,数据库可优化性能。
    • TransactionStatus:事务状态接口,记录事务的当前状态(如是否活跃、是否需要回滚)。

    # 3. 声明式事务的实现原理(AOP)

    • 1. 切面织入:Spring 扫描带有@Transactional注解的 Bean,为其生成代理对象(JDK 或 CGLIB),在目标方法执行前后植入事务逻辑。
    • 2. 事务执行流程:
      1. 代理对象调用目标方法前,通过PlatformTransactionManager.getTransaction()获取事务(根据TransactionDefinition配置),开启事务;
      2. 执行目标方法:若方法正常返回,调用commit()提交事务;
      3. 若方法抛出异常(且异常类型符合rollbackFor配置),调用rollback()回滚事务;若异常不符合,则提交事务。
    • 注意:@Transactional默认只对RuntimeException和Error回滚,若需对 checked 异常(如IOException)回滚,需显式配置rollbackFor = Exception.class。

    上次更新: 12/30/2025
    Spring AOP 在什么场景下会失效?
    声明式事务的实现原理(AOP)

    ← Spring AOP 在什么场景下会失效? 声明式事务的实现原理(AOP)→

    最近更新
    01
    CPU 使用率较高排查和解决
    12-29
    02
    JVM OOM 问题如何排查和解决
    12-29
    03
    接口防刷怎么实现?
    12-29
    更多文章>
    Theme by Vdoing | Copyright © 2025-2026 Bohr-L's note
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式