异常总结(3):class path resource [applicationContext.xml] cannot be opened because it does not exist 和 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

spring整合Mybatis时前后出现这两个错误,最后发现原因时同一类,便归到一起总结

分析:Spring在编译时,会把 src/main/java 目录(默认Source目录)下的所有 .java 文件编译成 .class 文件,并按照原有的层次结构存放到t arget/classes 文件夹中,而 xml 和 properties 等文件是不需要编译的,因此Spring便不会自动把这些资源文件也加载到 classes 文件夹中,而没有这些配置文件,在运行时自然也是找不到的,因此而报出异常。

解决方法:正常来说,建立一个src/main/resources 并标记为 Resources 目录便可实现 resources 目录下的资源文件自动加载到 classes 文件夹中;

并且在pom文件中设置如下,便可将主目录中所有的 xml 文件和 properties 文件输出到 classes 文件夹中;

<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>

但是,这招并不能解决本次问题,因此选择手动将 xml 文件复制到 classes 文件夹的对应层级中,便成功解决。
至于为何不能自动加载资源文件,具体原因,尚未弄清楚。
posted @ 2021-08-19 15:27  realDevin  阅读(241)  评论(0编辑  收藏  举报