Spring事务失效的场景

1. 事务方法执行期间出现了异常,但是并未指定rollbackFor: Spring默认只会在遇到error和RunTimeException时才会回滚。

java 复制代码
public boolean rollbackon ( Throwable ex){
	return (ex instanceof RuntimeException || ex instanceof Error);
}

2. 事务方法执行期间出现了异常,但被方法本身捕获:使用catch进行捕获之后,Spring无法感知到异常,无法回滚。

3. 同一个类种方法互相调用:因为Spring事务的本质是动态代理,通过生成代理对象去调用方法,并且在方法前后增加事务效果;同一类中的方法调用时,无法使用代理对象调用,使用的是this调用,因此无法实现动态代理效果。

4. 方法不是public: Spring源码做了判断,如果不是Public会直接返回。

java 复制代码
if (allowPublicMethodsonly() && !Modifier.isPublic(method.getNodifiers())){
	return null;
}

5. 方法是final或static:考虑动态代理的实现原理,无论是基于JDK还是CGLib,都不允许final和static的修饰。

相关推荐
学逆向的7 分钟前
C 枚举变量
c语言·开发语言·网络安全
Sakura_j_h_18 分钟前
Python 在定时任务里输出 emoji,UnicodeEncodeError 从哪来
开发语言·字符编码·windows·python·定时任务
thefool11226630 分钟前
TCP 1
java·1024程序员节
码事漫谈1 小时前
消除AI幻觉,普通人能做的五件事
后端
金銀銅鐵3 小时前
[Java] 用 GUI 展示 EnumSet 增减元素时的内部变化(下)
java·后端·ai编程
AI人工智能+电脑小能手3 小时前
一次请求打几个下游,这个Java并行任务工具类6个方法按序聚合
java·线程池·并发编程·1024程序员节·批量处理·并行任务
Mk598784 小时前
给 Agent 装上对话框 —— AgentScope-Java 接入 Spring Boot 与 SSE 流式实战
后端
付威20235 小时前
从 Loop 到 Runtime:rpi Agent Loop 与 Cordis 的边界、取舍与组合
后端
IT_陈寒5 小时前
Redis的LRU淘汰策略坑了我一整天
前端·人工智能·后端
paopaokaka_luck5 小时前
心理咨询管理系统(WebSocket实时沟通、基于用户的协同过滤、 ECharts多维分析、 预约业务流程、预约校验与定时处理)
java·vue.js·spring boot·mysql·spring·echarts·1024程序员节