@Transactional失效情况
@Transactional失效的情况
1、一个有@Transactional的方法被没有@Transactional方法调用时,会导致Transactional作用失效
原理:@Transactional是基于动态代理对象来实现的,而在类内部的方法的调用是通过this关键字来实现的,没有经过动态代理对象,所以事务回滚失效。
2、就是在@Transactional方法内部捕获了异常,没有在catch代码块里面重新抛出异常,事务也不会回滚。
原理:这时候我们来看看spring的源码:
TransactionAspectSupport类里面的invokeWithinTransaction方法
3、对非public方法进行事务注解,@Transactional 将会失效。
原因:是应为在Spring AOP代理时,事务拦截器在目标方法前后进行拦截,DynamicAdvisedInterceptor的intercept 方法会获取Transactional注解的事务配置信息,
因为在Spring AOP 代理时,如上图所示 TransactionInterceptor (事务拦截器)在目标方法执行前后进行拦截,DynamicAdvisedInterceptor(CglibAopProxy 的内部类)的 intercept 方法或 JdkDynamicAopProxy 的 invoke 方法会间接调用 AbstractFallbackTransactionAttributeSource的 computeTransactionAttribute 方法会间接调用 AbstractFallbackTransactionAttributeSource的 computeTransactionAttribute 方法,这个方法会获取Transactional 注解的事务配置信息。他会首先校验事务方法的修饰符是不是public,不是 public则不会获取@Transactional 的属性配置信息。
4、在一个类中A方法被事务注释,B方法也被事务注释。
现象:执行B方法是报错,但是异常被A catch 住,此时事务也会失效。
@Transactional失效情况相关推荐
- 3 种场景 @Transactional 失效的解决方法
以下文章来源方志朋的博客,回复"666"获面试宝典 来源 | blog.csdn.net/qq_20597727/article/details/84900994 Transact ...
- Spring事务注解Transactional失效
前情提要:当Service接口实现类中存在内部方法调用,并且方法需要支持事务控制时,事务控制失效,事务的传播级别为默认REQUIRED(默认模式). 1.简化版翻车代码: Service接口层 Ser ...
- spring + mybatis 注解 @Transactional失效
1.问题 在使用@Transactional注解管理事务的时候会出现很多错误,比如: *** was not registered for synchronization because synchr ...
- 索引使用规则及索引失效情况
索引使用规则 联合索引 索引失效情况 联合索引 1.最左前缀法则 如果索引使用了多列(联合索引),要遵守最左前缀法则.最左前缀法则指的是查询从索引的最左列开始,并且不跳过索引中的列,如果跳跃某一列,索 ...
- 一篇文章了解Like用法及常见索引失效情况
1.简介 本文主要通过介绍Like索引及常见索引失效情况,以MySQL为例. 2.EXPLAIN关键字 一条查询语句在经过MySQL查询优化器的各种基于成本和规则的优化会后生成一个所谓的执行计划. E ...
- alarmmanager 失效_举例电机轴承失效情况,让轴承性能体现更好、寿命更长
原标题:举例电机轴承失效情况,让轴承性能体现更好.寿命更长 电机轴承也可称为电动机轴承,是专用在电动机上的轴承,电机轴承在使用过程中常会出现一些故障的发生,导致轴承损坏,也就是轴承失效无法正常运转,为 ...
- @Transactional 失效的几种情况
目录 一.非public修饰的方法 二.类内部访问 三.数据库不支持事务 四.异常类型不匹配 五.传播属性设置问题 六.捕获异常未抛出 七.Bean没有纳入Spring容器管理 八.事务方法内启动新线 ...
- @transactional注解失效情况
先来了解一下@Transactional注解事务的特性吧,可以更好排查问题 1.service类标签(一般不建议在接口上)上添加@Transactional,可以将整个类纳入spring事务管理,在每 ...
- MySQL索引原理、失效情况
声明:本文是小编在学习过程中,东拼西凑整理,如有雷同,纯属借鉴. Mysql5.7的版本, InnoDB引擎 目录 1 mysql索引知识 1.1 B+Tree索引 1.2 主键索引和普通索引的区别 ...
最新文章
- Abp中使用可视化的日志面板
- 《计算机网络自顶向下》知识体系完全梳理
- 我看objective-C --不要把objC当做c/c++的超集
- 快速入门 Jupyter notebook
- 希望得到学术会议的及时回复该怎么说_张烨:在“选矿”博士的世界里,脚踏实地从来都不是说说而已!| 中南达人NO.188...
- (150)System Verilog仿真结束机制
- 华为EMUI 10系统内测截图曝光:基于Android 10.0
- CentOS 7 安装 daemontools
- phyton基础-01
- 高级工程师职称计算机要求,高级工程师职称评定条件及流程
- 前端怎么加粗字体_【好程序员独家】100道前端面试题(精选版 含答案)
- UDP都是全双工通信的吗
- Source Insight4.0字体大小及护眼背景配置
- python for x in range(0,10) 例如使用python打印9*9乘法表
- compare和compareTo方法的区别
- ffmpeg调整缩放裁剪视频的基础知识(转)
- pipeline的相关解释(instruction pipeline)
- 计算机应用基础出版年度,2021年度计算机应用基础开专选修期末改.doc
- Nest.js 怎样使用 hbs 的 partials?
- Axure:多个RP源文件合并的办法和注意事项
热门文章
- 31、通信卫士--拦截黑名单电话
- 蛋白质残基相互作用网络分析
- 括号匹配问题(栈)C++
- Quaternion to angular velocity. 四元数 角速度
- matlab创建反正弦asin,JavaScript中反正弦函数Math.asin()的使用简介
- uTorrent 2.2.1 高级参数设置详解及优化(转载)
- 国内云主机为什么那么贵?主要从4个方面来决定
- 【功能实现】qrcode生成二维码Demo
- Android SDK proxy代理加速
- Windows下查看MySQL安装的版本