Spring事务管理深度解析
抽象统一
事务传播行为(Propagation)
传播类型 | 应用场景 |
---|---|
REQUIRED(默认) | 当前存在事务则加入,否则新建(适用于多数业务逻辑) |
REQUIRES_NEW | 强制新建事务(如日志记录需独立提交) |
NESTED | 嵌套事务(支持部分回滚,依赖数据库SAVEPOINT) |
NOT_SUPPORTED | 非事务执行(暂停当前事务,如批量读取) |
事务隔离级别(Isolation)
@Transactional(isolation = Isolation.REPEATABLE_READ)
public void updateInventory() { ... }
AOP代理机制
事务边界控制流程
graph TB
A[方法调用] --> B[事务拦截器]
B --> C{是否存在事务?}
C -->|是| D[根据传播行为加入/挂起事务]
C -->|否| E[新建事务]
D/E --> F[执行业务逻辑]
F --> G{是否异常?}
G -->|是| H[回滚事务]
G -->|否| I[提交事务]
注解配置详解
@Transactional(
propagation = Propagation.REQUIRED,
isolation = Isolation.DEFAULT,
timeout = 30, // 事务超时秒数
readOnly = false, // 优化只读查询(如Hibernate跳过脏检查)
rollbackFor = {SQLException.class}, // 指定回滚异常类型
noRollbackFor = NullPointerException.class
)
@Autowired
private TransactionTemplate transactionTemplate;
public void batchProcess() {
transactionTemplate.execute(status -> {
try {
// 业务逻辑
return result;
} catch (Exception e) {
status.setRollbackOnly(); // 手动回滚
throw e;
}
});
}
@Bean
@Primary
public PlatformTransactionManager primaryTxManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean
public PlatformTransactionManager secondaryTxManager(@Qualifier("secondaryDS") DataSource ds) {
return new DataSourceTransactionManager(ds);
}
总结:Spring事务管理通过抽象层实现技术无关性,结合声明式与编程式模式满足不同场景需求。开发者需深入理解传播行为、隔离级别等核心概念,规避常见陷阱,并通过合理配置实现高性能、高可靠的事务处理。在云原生与微服务架构中,结合Seata等分布式事务方案,可构建复杂业务下的数据一致性保障体系。