shiro+spring boot+mybatis启动循环引用问题解决思路和方案

启动报错:Error creating bean with name ‘dataSource‘: Requested bean is currently in creation: Is there an unresolvable circular reference?

翻译过来的意思就是:创建bean“dataSource”报错:需要的bean正在被创建:是否有一个没解决的循环依赖?

更通俗点的解释就是:因为循环依赖的问题导致“dataSource”这个bean无法被创建。

那么我们首先想到的是“到底是哪里出现了循环依赖?

最直接的方式是看启动日志。

从上往下读异常信息是:创建myshiroRealm失败——因为需要的类userServerImp创建失败——因为userDao创建失败——因为userMapper创建失败——因为SQLSessionFactory创建失败——因为dataSource创建失败——因为mydateSource失败——因为datasourceInitializer创建失败——因为dataSource创建失败——因为dataSource正在被创建——因为循环依赖。

那么问题就很明显了:创建dataSource的时候需要先创建dataSource!!!

这时我们会有第二个问题“为什么在引入了shiro之后会出现这个问题?

回到上面的过程,我们知道在在初始化myshiroRealm的时候需要用到数据库(基于其它方式访问数据的realm,不在讨论范围),于是不可避免的用到dataSource。如果在初始化shiroRealm的时候容器没有dataSource,容器就会为我们创建一个,于是就有了我们看到的循环依赖的问题。

那么我们会想“如果在初始化shiroRealm的时候,容器已经有了dataSource,就不会有循环依赖的问题

这时就有了第三个问题“如何在初始化shiroRealm之前,让容器已经拥有dataSource?

我的方法是让shiroRealm初始化的时候某个类变成“懒加载”。如下:

@Resource(name="userServerImp")

@Lazy

UserServer userServer;

时间: 2024-07-29 06:00:19

shiro+spring boot+mybatis启动循环引用问题解决思路和方案的相关文章

spring boot应用启动原理分析

spring boot quick start 在spring boot里,很吸引人的一个特性是可以直接把应用打包成为一个jar/war,然后这个jar/war是可以直接启动的,不需要另外配置一个Web Server. 如果之前没有使用过spring boot可以通过下面的demo来感受下. 下面以这个工程为例,演示如何启动Spring boot项目: git clone [email protected]:hengyunabc/spring-boot-demo.git mvn spring-b

spring boot + mybatis + druid

因为在用到spring boot + mybatis的项目时候,经常发生访问接口卡,服务器项目用了几天就很卡的甚至不能访问的情况,而我们的项目和数据库都是好了,考虑到可能时数据库连接的问题,所以我打算引入数据池,引入数据池的时候找来找去,比较了当前两个最火的数据池,阿里的druid和HikariCP,比来比去选了阿里的druid,虽然spring boot默认不支持druid,而是支持HikariCP,而且HikariCP的性能更好,但是阿里功能多,就是想支持国产 实际配置: 1.首先现在下载一

【spring boot+mybatis】注解使用方式(无xml配置)设置自动驼峰明明转换(),IDEA中xxDao报错could not autowire的解决方法

最近使用spring boot+mybatis,使用IntelliJ IDEA开发,记录一些问题的解决方法. 1.在使用@Mapper注解方式代替XXmapper.xml配置文件,使用@Select等注解配置sql语句的情况下,如何配置数据库字段名到JavaBean实体类属性命的自动驼峰命名转换? 使用spring boot后,越来越喜欢用注解方式进行配置,代替xml配置文件方式.mybatis中也可以完全使用注解,避免使用xml方式配置mapper.(参考  springboot(六):如何优

spring boot+mybatis整合

LZ今天自己搭建了下Spring boot+Mybatis,比原来的Spring+SpringMVC+Mybatis简单好多.其实只用Spring boot也可以开发,但是对于多表多条件分页查询,Spring boot就有点力不从心了,所以LZ把Mybatis整合进去,不得不说,现在的框架搭建真的是方便.话不多说,进入正题. 一.java web开发环境搭建 网上有很多教程,参考教程:http://www.cnblogs.com/Leo_wl/p/4752875.html 二.Spring bo

spring boot+mybatis+quartz项目的搭建完整版

1. 利用spring boot提供的工具(http://start.spring.io/)自动生成一个标准的spring boot项目架构 2. 因为这里我们是搭建spring boot+mybatis+quartz架构,故在pom.xml文件中配置相关依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boo

使用IDEA搭建Spring boot+Mybatis工程

简介:Spring boot只使用一个核心配置文件,取消了一系列xml配置,甚至连web.xml都没有,全部使用注解的方式完成WEB层的功能.框架内置Tomcat服务器,运行启动类中的Main函数即可启动. 下面就来搭建Spring boot+Mybatis工程 新建工程 勾上web,其他的不用 Finish 完善一下目录结构: 在pom.xml配置所有相关的依赖: 1 <?xml version="1.0" encoding="UTF-8"?> 2 &

spring boot 项目启动无任何反应

遇到的问题 spring boot项目启动后无任何报错,ps有进程,nohub无日志 定位 更换jar包,问题依然存在,将jar包放到其他服务器,运行正常,排除打包问题 同服务器其他系统运行正常,但停止后不能再次启动,出现相同问题 怀疑日志级别设置有问题,或编码问题,修改log配置问题依然存在 重启系统,问题仍然存在 重装jdk,问题解决 原文地址:https://www.cnblogs.com/bincoding/p/10199782.html

[转] Druid简介(Spring Boot + Mybatis + Druid数据源【自己定制】)

Druid的简介Druid是一个非常优秀的数据库连接池.在功能.性能.扩展性方面,都超过其他数据库连接池,包括DBCP.C3P0.BoneCP.Proxool.JBoss DataSource. Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署的严苛考验. Druid是一个JDBC组件,它包括三个部分: 基于Filter-Chain模式的插件体系. DruidDataSource 高效可管理的数据库连接池. SQLParser Druid的功能兼容DBCPDruid提

spring boot无法启动,或者正常启动之后无法访问报404的解决办法

以前用spring boot都是用idea的自动创建,或者是用的Jhipster创建的,就没有深究怎么去搭建.但是今天晚上心血来潮,想自己搭一个demo来整合一些技术,于是就花一点时间来手动搭.因为今天网络有点不好,所以spring boot的官网一直打不开,也就导致了无法阅读官方文档,就按照自己的记忆去搭于是遇到了以下两个问题 一 启动不了,一直报错,而且报的错很多时候还不一样.我就不列出报的什么错了,spring boot已经这么集成化了,难道我都还要配错?肯定是细节,和代码没有关系.于是找