您现在的位置是:首页 > 后台技术 > 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
加上之后,就好了。
再看看数据库

数据并没有插入成功
后来,经过长时间的百度,才知道,是整合shiro引起的。为了以后不再犯这个错,特意记录一下
如下图,是一个添加用户的方法

可以看到,方法上面是加了事务注解的,但是当下面主动抛出异常的时候,却不回滚。


刚开始,我的排查思路是如下:
1数据库的存储引擎是否是innoDB
2是否在启动类上加入了@EnableTransactionManagement 注解
3方法是否为public
4是否抛出了非RuntimeException
我依次排查后,发先都不是
最后,经过查阅各种资料知道,是bean创建的顺序问题,shiro的bean先于spring的事务将userService实例化了,导致spring事务初始化时无法扫描到该bean,造成这个bean上面没有绑定事务,事务失效。
解决方法,在realm引用的service上加注解@Lazy
加上之后,就好了。


数据并没有插入成功
Tags:shiro springboot 事务失效
很赞哦! ()
上一篇:JWT的使用(图文)
随机图文
微服务springcloud(图文)
微服务就是由一系列围绕自己业务开发的微小服务构成,他们独立部署运行在自己的进程里,基于分布式的管理 微服务是一种架构方式: 将单一应用基于业务拆分多个微小服务,他们独立运行 独立部署 每个服务运行在自己计算机进程里面 对于这些服务都是分布式管理。 这种架构是将单个的整体应用程序分割成更小的项目关联的独立的服务。一个服务通常实现一组独立的特性或功能,包含自己的业务逻辑和适配器。各个微服务之间的关联通过暴露api来实现(http)。这些独立的微服务不需要部署在同一个虚拟机,同一个系统和同一个应用服务器中代码简洁之道-validation
代码简洁之道-validationspringboot项目静态资源下载(图文)
本文介绍如何将springboot项目中的静态文件下载下来代码简洁之道-lombok(图文)
lombok使用介绍