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

相关推荐
SatVision炼金士8 分钟前
SDK管理本地java版本
java·开发语言·sdkman
奕成则成9 分钟前
Python 创建虚拟环境
开发语言·python
独自破碎E13 分钟前
什么时候@Async会失效?
java·开发语言
lpfasd12316 分钟前
Spring Boot 4.0.1 集成 Spring Boot AI 全攻略
人工智能·spring boot·后端
+VX:Fegn089521 分钟前
计算机毕业设计|基于springboot + vue在线教育学习系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·学习·课程设计
军军君0123 分钟前
Three.js基础功能学习四:摄像机与阴影
开发语言·前端·javascript·3d·typescript·three·三维
Morwit28 分钟前
如何使用CMake构建Qt新项目
开发语言·c++·qt
独自破碎E32 分钟前
Leetcode1499满足不等式的最大值
java·开发语言
最贪吃的虎39 分钟前
Java基础之泛型
java·运维·jvm·分布式·后端
zmzb010339 分钟前
C++课后习题训练记录Day62
开发语言·c++