Spring 事务什么时候失效
Spring 事务什么时候失效
ps: 自然是他的正常流程跑不通的时候就失效了
说@Transaction
注解修饰的方法必须是 public 的可以先冷静下,看看 org.springframework.transaction.interceptor.AbstractFallbackTransactionAttributeSource#computeTransactionAttribute
实现原理
基于切面编程在bean调用直接添加了事务拦截器,事务拦截器的具体实现
核心类
// 事务声明 org.springframework.transaction.interceptor.AbstractFallbackTransactionAttributeSource org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor org.springframework.transaction.interceptor.BeanFactoryTransactionAttributeSourceAdvisor // 切面事务支持 org.springframework.transaction.interceptor.TransactionAspectSupport // 事务管理 org.springframework.transaction.support.AbstractPlatformTransactionManager org.springframework.transaction.reactive.AbstractReactiveTransactionManager
失效场景
- 切面失效
例如调用方法生命为 final 方法,CGLib 动态代理无法代理该方法。
类内部方法内部调用,真要调用的话简易采用懒加载的方式再注入自己一次 - Spring 事务配置失效
这个就多了去了,@Transaction 注解里面能配置的属性都有影响。 - Isolution 隔离机制问题造成
- TransactionManager 事务管理器不同
- Propagation 事务传播机制设置错误
- rollback 和 noRollback 相关异常配置
附属补充
Propogation | Description |
---|---|
REQUIRED | 默认的事务传播级别,它表示如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。 |
SUPPORTS | 如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。 |
MANDATORY | 如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。 |
REQUIRES_NEW | 创建一个新的事务,如果当前存在事务,则把当前事务挂起。 |
NOT_SUPPORTED | 以非事务方式运行,如果当前存在事务,则把当前事务挂起。 |
NEVER | 以非事务方式运行,如果当前存在事务,则抛出异常。 |
NESTED | 如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于 PROPAGATION_REQUIRED。 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律