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-plusmybatis-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-startermybatis-spring-boot-starter,这个问题确实好解决,直接把mybatis-spring-boot-starter的依赖移除就好;如果和我是一个情况,是引入了公司的框架或则其它第三方框架里集成的mybatis-spring,根据我的白费经验,强行exclusions是不行的。在自己的pom文件中导入合适正确mybatis-spring的版本再覆盖回来就好。
在这里插入图片描述
废话很多,但是干货满满,希望可以帮到屏幕前正为这个异常抓狂的你。

  • 10
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值