← 每日面试题 学习看板

Spring中如何开启事务?

面试题/00java/04 框架/01Spring/05事务管理/Spring中如何开启事务?.md

面试记录 2026-10-11

题目:Spring中如何开启事务?

难度:medium

标签:spring/transaction, difficulty/medium

评分:⭐⭐⭐⭐☆(4/5)

我的回答

Spring 启动事务主要有两种方式。一个是通过 XML 进行配置,另外一个是通过注解进行配置。首先需要配置开启事务支持的注解,通过 Configer 配置注入进去。At,具体的注解是 at Enable Configer Transaction 还是什么,具体不记得了。然后在对应的使用的方法上增加 @Transactional 注解,这样对应的方法就开启了事务。另外,启动事务需要有相关的前置支持。首先第一点,对应的方法需要是一个公共的方法,并且当前调用是通过代理调用的,而不是在当前的 class 内部进行调用。因为事务是依赖 Spring 提供的代理来实现的。另外,Spring 的事务虽然是通过代理实现的,但代理也是基于数据库的事务支持才能实现的,所以另一重要条件是需要事务支持。

点评

优点:

不足:

补充:

完整讲解

第一部分:知识重点剖析

核心考点定位:考察 Spring 声明式事务的配置方式和失效场景,理解事务的底层实现机制。

知识点拆解:

  1. 开启事务的两种方式:
  1. @Transactional 常用属性:
  1. 事务传播行为(7 种):
  1. 事务隔离级别(4 种):
  1. 事务失效的常见场景:

第二部分:考察方向与延伸递进

考察方向:

延伸递进面试题:

  1. @Transactional 有哪些常用属性?分别是什么作用?
  1. 事务传播行为有哪些?REQUIRED 和 REQUIRES_NEW 有什么区别?
  1. 自调用为什么会导致事务失效?怎么解决?

第三部分:面试者参考回答(三步法口语化,300-400 字)

【一句话结论】

面试官您好,Spring 开启事务主要有两种方式:XML 配置和注解配置,注解方式更常用。

【三点展开】

第一,配置方式有两种。XML 方式用 <tx:annotation-driven/>,注解方式用 @EnableTransactionManagement 开启事务支持,然后在方法上标注 @Transactional。

第二,@Transactional 常用属性包括 readOnly(只读优化)、timeout(超时时间)、propagation(传播行为)、isolation(隔离级别)、rollbackFor(指定异常回滚)。

第三,事务失效的常见场景有:方法不是 public、自调用(同一个类内部调用)、异常被捕获未抛出、不是 Spring 管理的 Bean。自调用是因为不走代理,可以通过 AopContext.currentProxy() 或代理注入解决。

【一句边界】

当然,Spring 事务是基于 AOP 代理和数据库事务实现的,如果数据库引擎不支持事务(如 MyISAM),事务也会失效。