栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Mybatis-plus 使用过程报ClassNotFoundException: org.mybatis.logging.LoggerFactory

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Mybatis-plus 使用过程报ClassNotFoundException: org.mybatis.logging.LoggerFactory

问题描述

项目中用了公司的某一款框架A,里面集成了mybatis。新开发的项目使用了mybatis-plus,要引入A框架。配置好数据源、包扫描与bean扫描后,运行报
ClassNotFoundException: org.mybatis.logging.LoggerFactory错误。

分析问题

百度了一下,遇到这个情况的人还真不少,教程都是说让移除mybatis-spring-boot-starter,我检查过我的代码,使用的框架依赖了mybatis-spring-boot-starter这个还真不少!还是一个费力活呢,我花了一个早上把pom.xml中的含有这个的框架都移除了,怀着期待的心态,每移除一个就跑起来测一下,直到最后一个移除了还不行,我心态裂开了。
百度上找不到我的解决方法之后,我开始看源码,看看在执行的过程中什么地方会用到这个LoggerFactory。我从数据源配置开始看,刚开始看到MybatisSqlSessionFactoryBean的时候,我就发现了,居然源码中真的没有LoggerFactory!

我的Mybatis-Plus的版本是3.4.2,在项目中导入的方式是通过mybatisplus-spring-boot-starter,这里面导入了mybatis-plus与mybatis-plus-extension,这两个框架里面又自己去依赖了mybatis-spring的版本,那为什么会出现这个框架中找不到类的情况?不可能mybatis-plus开发人员会犯这种错误的吧。

解决过程

真相就只有一个:mybatis-plus-extension中管理的mybatis-spring版本被我项目中其它地方引入的mybatis-spring版本给覆盖了。

我们来验证一下猜想:
通过点击前面的包名,找到所在的library文件,查看当前所依赖的mybatis-spring的版本。如下图所示,目前依赖到的版本是1.3.2。

在来看看mybatis-plus-extension中所需要的mybatis-spring的版本是什么?是2.0.5版本。

那答案就很明显了,就是mybatis-plus版本覆盖的原因。解决问题的方法很简单,但我更想直到这个1.3.2版本是怎么来的,于是我看了所引用的公司A框架的依赖。果然坑在这里。

问题解决

前面的分析已经清楚是mybatis-spring的版本覆盖问题出现的类缺失导致的错误,我推测所有同学出现这个错误都是这个原因(不信可以自己看源码核查),如果是在自己的最外层引入了mybatisplus-spring-boot-starter和mybatis-spring-boot-starter,这个问题确实好解决,直接把mybatis-spring-boot-starter的依赖移除就好;如果和我是一个情况,是引入了公司的框架或则其它第三方框架里集成的mybatis-spring,根据我的白费经验,强行exclusions是不行的。在自己的pom文件中导入合适正确mybatis-spring的版本再覆盖回来就好。

废话很多,但是干货满满,希望可以帮到屏幕前正为这个异常抓狂的你。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1031390.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号