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的修饰。

相关推荐
Moment10 小时前
Vibe Coding 时代,到底该选什么样的工具来提升效率❓❓❓
前端·后端·github
Victor35610 小时前
MongoDB(27)什么是文本索引?
后端
可夫小子11 小时前
OpenClaw基础-3-telegram机器人配置与加入群聊
后端
IT_陈寒11 小时前
SpringBoot性能飙升200%?这5个隐藏配置你必须知道!
前端·人工智能·后端
aiopencode12 小时前
使用 Ipa Guard 命令行版本将 IPA 混淆接入自动化流程
后端·ios
掘金者阿豪12 小时前
Kavita+cpolar 打造随身数字书房,让资源不再混乱,通勤 、出差都能随心读。
后端
心之语歌13 小时前
Spring Security api接口 认证放行
后端
用户83562907805113 小时前
Python 实现 PPT 转 HTML
后端·python
0xDevNull13 小时前
MySQL索引进阶用法
后端·mysql
舒一笑13 小时前
程序员效率神器:一文掌握 tmux(服务器开发必备工具)
运维·后端·程序员