其实不光是mapper.xml文件,还有一些其他的资源会加载失败,我自己尝试了n多办法,但都失败了,结合了网上CSDN和博客园里面多篇文章的内容,才算是搞定了这个问题,但是看过的文章实在是忘记都有哪些了,就不贴出来了,在这里向技术大佬致敬。
一般我的xml文件和properties文件(例:log4j.properties,jdbc.properties,spring-mvc.xml)都是放在config目录里面,和src目录是平级的,
而在我运行时,经常会遇到mybatis的mapper.xml文件加载失败的情况,而log4j.properties更是家常便饭。
结合多篇文章的结果得出的解决办法就是在pom.xml文件里面配置资源文件的位置,
这个解决只能用于maven项目,不过现在不用maven的web项目已经很少了吧,毕竟手动导包挺麻烦的,pom.xml不香吗。
注意,要配置每个xml文件和properties的位置,
因为在pom.xml里面配置过资源文件后,原本项目默认的资源文件路径配置可能失效,
比如 src/main/recources
这里贴出我的pom.xml的相关部分代码
<!-- 加载配置资源文件 -->
<resources>
<!-- Config -->
<resource>
<directory>config</directory>
<includes>
<include>spring-mvc.xml</include>
<include>applicationContext-DB.xml</include>
<include>applicationContext-User.xml</include>
<include>ApplicationContext/ac-DataSource.xml</include>
<include>ApplicationContext/ac-Transaction.xml</include>
<include>ApplicationContext/ac-SqlSessionsFactoryDB.xml</include>
<include>ApplicationContext/ac-SqlSessionsFactoryUser.xml</include>
</includes>
<filtering>true</filtering>
</resource>
<!-- Config -->
<!-- Properties and Mapper -->
<resource>
<directory>config</directory>
<includes>
<include>Properties/jdbc.properties</include>
<include>Properties/log4j.properties</include>
<!-- Maper -->
<include>Mapper/User/AdminMapper.xml</include>
<include>Mapper/User/StudentMapper.xml</include>
<include>Mapper/User/TeacherMapper.xml</include>
<include>Mapper/DB/DBMapper.xml</include>
<!-- Maper -->
</includes>
<filtering>false</filtering>
</resource>
<!-- Properties and Mapper -->
</resources>
<!-- 加载配置资源文件 -->
<resources></resources>标签是要放到<build></build>标签内的
关于<filtering></filtering>的取值是true和false,是否开启过滤,
可以选择性的搭配<properties></properties>标签配合使用,具体标准规范请参照相关的文档或技术文章。
<directory>和<includes>结合来锁定获取一个资源文件,
<directory>是获取目录,<includes>是映射路径
资源文件将会映射到 项目\WEB-INF\classes目录下
具体映射关系如下
<!-- 这个配置将会把项目里的config/Properties/jdbc.properties文件映射到
项目/WEB-INF/classes/Properties/jdbc.properties -->
<resource>
<directory>config</directory>
<includes>
<include>Properties/jdbc.properties</include>
</includes>
</resource>
<!-- 这个配置将会项目里的config/Properties/jdbc.properties文件映射到
项目/WEB-INF/classes/jdbc.properties -->
<resource>
<directory>config/Properties</directory>
<includes>
<include>jdbc.properties</include>
</includes>
</resource>
具体映射规则,将pom.xml里的配置和 tomcat/webapps/classes目录里的对比一下就了解了。