您现在的位置是:首页 > 后台技术 > JavaJava

springboot整合shiro后事务失效(图文)

第十三双眼睛2021-10-17【Java】人已围观

简介记录一次开发中,很大的坑

昨天在开发的时候,遇到有一个很奇怪的问题,之前的项目的一个功能是正常的,但是昨天整合了shiro之后,这个功能就不正常了,原本的事务失效了。
后来,经过长时间的百度,才知道,是整合shiro引起的。为了以后不再犯这个错,特意记录一下
如下图,是一个添加用户的方法

可以看到,方法上面是加了事务注解的,但是当下面主动抛出异常的时候,却不回滚。
日志显示,这个连接没有事务,而且,数据库已经插入成功了

刚开始,我的排查思路是如下:
1数据库的存储引擎是否是innoDB
2是否在启动类上加入了@EnableTransactionManagement 注解
3方法是否为public
4是否抛出了非RuntimeException

我依次排查后,发先都不是
最后,经过查阅各种资料知道,是bean创建的顺序问题,shiro的bean先于spring的事务将userService实例化了,导致spring事务初始化时无法扫描到该bean,造成这个bean上面没有绑定事务,事务失效。
解决方法,在realm引用的service上加注解@Lazy
加上之后,就好了。
再看看数据库

数据并没有插入成功

Tags:shiro   springboot   事务失效

很赞哦! ()

文章评论

    共有条评论来说两句吧...

    用户名:

    验证码:

站点信息

  • 网站名称:JavaStudy
  • 建站时间:2019-1-14
  • 网站程序:帝国CMS7.5
  • 文章统计242篇文章
  • 标签管理标签云
  • 统计数据百度统计
  • 微信公众号:扫描二维码,关注我们