🍋项目中出现的问题
最近,在做项目的时候,Springboot框架整合mybatis插件时报了绑定异常的错误,错误如下图所示。
🍋分析问题
看到这个问题,刚开始在想是不是Springboot主类与mybatis的xml文件没有绑定上,便去target目录下查看xml文件是否被成功编译,找到target目录下的mapper文件夹,发现里面并没有把xml文件编译好,导致程序要运行xml文件的时候,找不到该文件,便报了绑定异常的错误,问题如下图所示。
这个错误让我想到之前的xml文件都是放在resources目录下的,这次放在java目录下直接报错;其原因是maven中默认会从项目的src/main/resources目录下查找资源,如果要读取其他路径下的资源的文件,就需要在build
标签中指定资源的路径,因此src/main/java目录下xml文件就属于资源的文件,需要在pom.xml文件指定资源的路径。
🍋解决问题
🍋方案一
第一种方法,直接把src/main/java目录下的xml文件复制到target/classes目录下的对应位置,问题即可解决,操作如下图所示。
缺点:不能复用,只要有xml文件新增,都要手动操作一遍。
🍋方案二
第二种方法,把src/main/java目录下的xml文件复制到src/main/resources目录下,由于maven中默认会从项目的src/main/resources目录下查找资源,因此重新启动项目问题即可解决,操作如下图所示。
缺点:资源文件都只能放在src/main/resourcces目录下,不可放在src/main/java目录下。
🍋方案三
第三种方法,对上述两种方案缺点进行分析,引入一种src/main/java目录和src/main/resources目录下都可自动完成编译,这种方法需要在pom.xml文件下的标签引入如下代码片段:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
引入了上述代码片段,控制台出现了新的问题,问题如下图所示。
控制台出现的问题有两点值得关注,一是配置文件启动失败,二是数据源没有配置;两个问题综合一分析,大概也知道问题所在,先去target目录下的classes文件找找原因,问题如下图所示。
根据上述分析,其原因是resources目录下的配置文件没有加载进来;之前分析过maven中默认会从项目的src/main/resources目录下查找资源,怎么会出现这个问题;这一系列问题都指向上述配置的代码片段,上述的代码片段新增了资源查找的方式,那maven会把之前默认资源查找的方式给弃用,使用新增的资源查找方式;因此,经过如上分析,只需在原来的代码片段上新增src/main/resources目录的资源查找方式,具体的操作如下代码片段:
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.yml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
经过以上代码实现,便可完成target目录所有文件的编译,结果如下两张图图所示。
🍋注意
回到刚开始出现的问题,绑定异常错误基本可以解决;若配置上述操作依然出现问题,这时候要看看Springboot框架是不是没有与mybatis插件建立联系,一般都是把这种联系写成全局配置,若没有如下图配置,可以尝试去配置文件进行配置,要非常注意下面代码的编写,毕竟写错了它也不报错,要找到问题比较难。
经过上述流程,问题基本可以解决;若绑定异常错误依然不可以解决或者有更好的解决办法,欢迎大家在评论区留言。