前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring 注解@Transactional

Spring 注解@Transactional

作者头像
发布2019-08-29 11:22:19
7480
发布2019-08-29 11:22:19
举报
文章被收录于专栏:WD学习记录

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://cloud.tencent.com/developer/article/1495106

时刻感觉自己要写出bug的节奏,瑟瑟发抖。

最近开发中发现一个问题,在使用@Transactional注解时,发现注解未生效,注解的方法在出现异常时,并没有回滚。因此搜了一些该注解失效的原因。

@Transactional注解无效的原因

  1. 被注解的方法不是public的
  2. 异常类型不是unchecked类型。如果checked异常也想被回滚,注解上写明异常类型。
代码语言:javascript
复制
@Transactional(rollbackFor=Exception.class) 
  1. 数据库引擎需要支持事务。
  2. 是否开启了对注解的解析。
代码语言:javascript
复制
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
  1. spring是否扫描到这个包。
  2. 检查是不是在同一个类的方法中调用。

自己代码中失效的原因

被注解的方法是public的,注解上也写明了异常类型,数据库引擎是innodb。第四点暂时没有找到在哪里配置。该方法所在的包也是被扫描到的。异常也没有catch。

最终在我这边,该注解失效的原因是在同一个类中的方法调用。

失效原理分析

在同一个类中调用方法失效的原因是,事务管理是基于动态代理对象的代理逻辑实现的,那么如果在类内部调用类内部的事务方法,这个调用事务方法的过程并不是通过代理对象来调用的,而是直接通过this对象来调用方法,绕过的代理对象,肯定就是没有代理逻辑了。

参考:

@Transactional注解不起作用解决办法及原理分析

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019年08月18日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • @Transactional注解无效的原因
  • 自己代码中失效的原因
  • 失效原理分析
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档