classpath* 和 classpath使用遇到的问题

代码星冰乐

专注成就未来

首页 归档 关于

classpath* 和 classpath使用遇到的问题

May 24, 2018 | haifeiWu | Java | 阅读
文章目录
  1. 1. 错误的配置与看到的异常
  2. 2. classpath* 和 classpath的区别:
  3. 3. 号外

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


由于版权原因,请阅读原文 --> classpath* 和 classpath使用遇到的问题

关注我们

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

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

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

错误的配置与看到的异常

  1. 配置文件中的配置,看上去没啥问题

    1
    2
    3
    4
    5
    <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. 启动服务器之后看到的异常

    1
    2
    3
    4
    5
    6
    7
    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查找的路径是:

1
2
3
4

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

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

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

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

改为:

1
<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实现的一个配置管理平台,其核心设计目标是“为业务提供统一的配置管理服务”,可以做到开箱即用。

  • 基于Netty实现的轻量级分布式应用配置中心

关注我们

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

分享
Java
聊聊HashSet源码Kotlin:Android开发技巧
微信关注我们
分类
  • Android8
  • Go4
  • Java59
  • Kafka,Java1
  • Kotlin2
  • Linux1
  • MapReduce1
  • Python2
  • Raft1
  • Redis1
  • ThreadPoolExecutor1
  • go1
  • 工具1
  • 总结8
  • 旅游日记1
标签
Nginx ChanghuiN haifeiWu Android Java 设计模式 hexo Kotlin 算法 MySQL 源码解析 Python Redis golang web Kafka 配置中心 总结 性能优化 旅游日记 Shell Go 问题排查 译文 Docker Spring Boot 工具 学习笔记 WebFlux 性能测试 go 散列表 源码 netty Raft
最近文章
  • Kafka的日志复制机制
  • 从20到21
  • go 并发编程
  • 【译】了解Linux CPU负载-您何时应该担心?
  • Zookeeper 与分布式锁
  • 基于Redis的分布式锁到底安全吗?
  • 【译】Raft 学生指南
  • ThreadPoolExecutor 的简单梳理
  • MapReduce 的简单实现
  • 使用 Map 实现策略模式
福利专区
    免费SSL证书
      阿里云红包
        腾讯云专属福利
        Copyright © 2021 代码星冰乐. Powered by ChanghuiN. 版权所有 晋ICP备15001365号
        特别感谢: 云服务器服务商 、 CDN 服务商