下面从核心概念 → 事务传播机制 → 隔离级别 → 失效场景 → 最佳实践,系统讲一下Spring 事务。
一、Spring 事务的核心概念
1️⃣ Spring 事务的本质
Spring 事务不是新事物,而是对底层事务(JDBC / JPA / Hibernate / JTA)的统一封装。
- 核心接口:
PlatformTransactionManager - 常用实现:
DataSourceTransactionManager(JDBC / MyBatis)JpaTransactionManager(JPA)HibernateTransactionManagerJtaTransactionManager(分布式事务)
2️⃣ 两种事务管理方式
| 方式 | 说明 |
|---|---|
| 声明式事务(推荐) | @Transactional注解 |
| 编程式事务 | TransactionTemplate手动控制 |
✅99% 场景用声明式事务
二、@Transactional 的使用
1️⃣ 基本用法
@ServicepublicclassOrderService{@TransactionalpublicvoidcreateOrder(){orderMapper.insert();paymentMapper.insert();}}2️⃣ 开启事务(必须)
Spring Boot(自动开启 ✅)
@SpringBootApplication@EnableTransactionManagementBoot 默认已开启,但多数据源时需手动配置
三、Spring 事务传播行为(Propagation)
最核心、最容易出问题的部分
| 传播行为 | 说明 |
|---|---|
| REQUIRED(默认) | 有事务加入,没有就新建 |
| REQUIRES_NEW | 挂起当前事务,新建事务 |
| SUPPORTS | 有事务就用,没有也行 |
| NOT_SUPPORTED | 非事务执行 |
| NEVER | 不能在事务中运行 |
| NESTED | 嵌套事务(SavePoint) |
| MANDATORY | 必须在事务中 |
✅ 常见示例
@Transactional(propagation=Propagation.REQUIRED)publ