900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > maven依赖循环引用_shiro+spring boot+mybatis启动循环引用问题解决思路和方案

maven依赖循环引用_shiro+spring boot+mybatis启动循环引用问题解决思路和方案

时间:2019-10-22 11:53:39

相关推荐

maven依赖循环引用_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;

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。