问题情景:
最近将几个小的Demo整合在一起,其中项目A使用Mybatis项目B使用Mybatis-plus。在正常的修改完,pom文件后尝试启动项目,启动失败。报错内容大致如下:
Error creating bean with name 'faultController': Unsatisfied dependency expressed through field 'faultService';
Error creating bean with name 'FaultService': Injection of resource dependencies failed;
Error creating bean with name 'sqlSessionFactory' defined in class path resource [com/baomidou/mybatisplus/autoconfigure/]: Bean instantiation via factory method failed; nested exception is :
Caused by: :
分析问题
通过日志的报错信息的观察,初步得出在Bean工厂创建对象时,注入的属性都注入失败了,从而导致Error creating bean的错误。
关于springboot创建bean失败的情况有如下可能(在本问题中以下愿意均被排除):
文件中是否正确配置mapper-locations属性的值
层的接口是否忘记添加@Mapper注解
启动类中是否特殊指定@MapperScan("")
的<mapper namespace>是否与mapper接口名对应
上述情况逐一排查,如果均无法解决问题则把问题原因转移到POM文件所引入的依赖中,此时发现POM依赖中同时引入了mybatis的starter和mybatis-plus的starter
<dependency>
<groupId></groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${}</version>
</dependency>
<dependency>
<groupId></groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
两个启动器同时存在会导致mybatis-plus的启动器无法正常启动,反映在项目启动日志中,启动日志不会打印Mybatis-Plus的启动logo
解决方案
如果项目中需要同时使用mybatis和plus,只需要保留mybaits-plus的启动器即可。同时存在会导致mybatis-plus启动器失效,同时mybatis-plus的启动器本身包含mybatis启动器。注释掉pom中的依赖,启动日志显示Mybatis-Plus的logo,项目正常启动。