classpath* 和 classpath使用遇到的问题

在spring配置mybatis的时候需要加载mybatis的多个相关配置文件,其中mybatis的mapper对应的xml通常放在其他的jar包中,mybatis-conf文件通常在当前工程中,so,也就引出了今天遇到的问题,那么classpath* 和 classpath到底有啥区别呢?

错误的配置与看到的异常

  1. 配置文件中的配置,看上去没啥问题 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSourceM"/> <property name="mapperLocations" value="classpath*:/mappings/*.xml"/> <property name="configLocation" value="classpath*:/spring/mybatis-config.xml"></property> </bean>
  2. 启动服务器之后看到的异常 Caused by: java.io.FileNotFoundException: Could not open ServletContext resource [/classpath*:/spring/mybatis-config.xml] at org.springframework.web.context.support.ServletContextResource.getInputStream(ServletContextResource.java:141) at org.mybatis.spring.SqlSessionFactoryBean.buildSqlSessionFactory(SqlSessionFactoryBean.java:358) at org.mybatis.spring.SqlSessionFactoryBean.afterPropertiesSet(SqlSessionFactoryBean.java:340) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624) ... 61 more
  3. 分析异常,解决问题

从上面的异常可以看出来,文件很明显是找不到的,但是这是为啥呢?

从异常中可以看出来,spring查找的路径是:

然而这个路径根本不是我们想要的路径,显然是找错了地方。

但是我们配置文件给出的路径是:``` classpath*:/spring/mybatis-config.xml

我们将配置文件中下面的配置稍作修改,去掉classpath后面的 *

<property name="configLocation" value="classpath*:/spring/mybatis-config.xml"></property>

改为:

<property name="configLocation" value="classpath:/spring/mybatis-config.xml"></property>

之后,启动正常,没有报错,问题解决。到这里可能有的同学会说为啥 <property name="mapperLocations" value="classpath*:/mappings/*.xml"/>可以用classpath*呢?原因请看下面

classpath* 和 classpath的区别:

  1. classpath* 它会搜索所有的 classpath,找到所有符合条件的文件,包括当前项目依赖的jar文件中的配置文件。而classpath不会到当前项目依赖的jar文件中去寻找。
  2. classpath* 存在可移植性问题,遇到问题时,应该使用classpath。
  3. 一般情况下我们根本没有必要去使用classpath*,直接使用classpath就好了。
  4. <property name="mapperLocations" value="classpath*:/mappings/*.xml"/>中的value="classpath*:/mappings/*.xml"路径是当前项目依赖的jar包中的路径。

号外

楼主造了一个轮子,LIGHTCONF 是一个基于Netty实现的一个配置管理平台,其核心设计目标是“为业务提供统一的配置管理服务”,可以做到开箱即用。

作 者:haifeiWu 原文链接:http://www.hchstudio.cn/article/2018/ccf6/ 版权声明:非特殊声明均为本站原创作品,转载时请注明作者和原文链接。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JAVA高级架构

程序猿的日常——SpringMVC系统架构与流程回顾

web开发经历了很漫长的时间,在国内也快有十几年的时间了。从最开始的进程级到现在的MVC经历了很多的改进和优化,本篇就主要复习了解下Spring MVC相关的知...

3575
来自专栏xingoo, 一个梦想做发明家的程序员

程序猿的日常——SpringMVC系统架构与流程回顾

web开发经历了很漫长的时间,在国内也快有十几年的时间了。从最开始的进程级到现在的MVC经历了很多的改进和优化,本篇就主要复习了解下Spring MVC相关的...

2177
来自专栏飞雪无情的博客

常用工具镜像网站又更新了#1

2016年11月份搭建了一个常用工具的镜像网站,因为众所周知的原因,很多软件工具需要自备梯子才可以下载,但是有的软件工具非常大,在梯子下下载,时间长的像噩梦,所...

2224
来自专栏闵开慧

让XP支持4G内存

  4G内存已经成为很多中高档笔记本电脑的标准配置。前两篇文章介绍了WIN7系统4G内存的破解过程和4G内存的完美利用。但是,很多朋友还是习惯用32位 XP系统...

1.4K11
来自专栏张戈的专栏

解决启用WP-Super-Cache后出现的几个问题

近期,随着新版互推联盟自适应 iframe 代码的推出,调用的博友也慢慢增加了 ,这是很高兴的事情,也有博友反应调用的这个页面加载会有点慢。我来说明一下,因为这...

4276
来自专栏北京马哥教育

linux安全小贴士

对于系统管理员,让产品的系统更安全,免于骇客和黑客的攻击,一直是一项挑战。这是我们关于“如何让Linux系统更安全” 或者 “加固Linux系统“之类话题的第一...

3598
来自专栏古时的风筝

Hexo + github 打造个人博客

前两年开始用 wordpress 搭了一个网站,但服务器是在 Linode 上,之所以要放在 Linode 上,要从买的域名说起,因为我买的域名是 fengzh...

3608
来自专栏玄魂工作室

windows下 安装Kali Linux到 U盘的方法

此篇文章本不想写,因为和安装相关的文章也写了一些,网上也有类似的教程。不过最近知乎总是接到邀请要回答这个问题,索性写一写,不知道能不能满足要求。 作者:玄魂...

79415
来自专栏飞雪无情的博客

工具 | Android Studio 2.3镜像更新,极速下载体验#2

Android Studio 2.3发布了,更新了很多不错的功能,比如WebP的支持,AppLink助手等,,因为众所周知的原因,所以就第一时间更新了镜像,让大...

973
来自专栏Crossin的编程教室

把你开发的网站免费发布到互联网上(2)

前几天,我们介绍了通过 PythonAnywhere 在互联网上创建一个站点: 把你开发的网站免费发布到互联网上(1) 本篇是上一篇的延续,来讲一讲如何将已有的...

3789

扫码关注云+社区

领取腾讯云代金券