Spring xml配置文件相对路径问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring xml配置文件相对路径问题相关的知识,希望对你有一定的参考价值。

本人一个RCP项目,在Spring appicaionContext.xml配置时遇到路径问题。
绝对路径可行,相对路径有问题。SpringDemo.java(com.xxx.spring.log包下)中用ApplicationContext获取Bean,ApplicationContext act=new FileSystemXmlApplicationContext("applicationContext.xml");applicationContext.xml文件在src目录下,请问如何设置相对路径?(譬如"../../../../src/applicationContext.xml")???

不理解你的RCP是什么意思。

如果是桌面程序,可以把applicationContext.xml放到classpath路径下,例如打包到jar里面。
使用ClassPathXmlApplicationContext读取就可以了。

../../这样的相对路径,不适合在桌面程序上使用。

如果一定要用FileSystemXmlApplicationContext设定向对路径,
applicationContext.xml仅仅是在src下还不够,需要在class文件所在目录下。
相对路径的设定,需要以class文件路径为基准。
参考技术A 介绍你用 HttpServletRequest 对象得到资源文件,如“applicationContext.xml”的路径

1、如果你可以得到 HttpServletRequest 对象,则用下面的方式
String path=request.getRealPath("applicationContext.xml");

2、如果你不能直接得到 HttpServletRequest 对象,那么通过下面的方式可以得到。
HttpServletRequest request=WebContextFactory.get().getHttpServletRequest();
WebContextFactory,是 dwr.jar 中的一个类,
当然如果你不想在项目中增加包,那就看看这个类的源代码,看在一个普通了中是如何得到 HttpServletRequest 对象的。

欢迎交流。
参考技术B ApplicationContext act=new ClassPathXmlApplicationContext("applicationContext.xml");
xxx=(xxxx)act.getBean("xxx");
参考技术C 大哥 FileSystemXmlApplicationContext是根据操作系统的文件路径的 ,要把applicationContext.xml的具体位置,C:\***\**\applicationContext.xml

spring配置文件applicationContext.xml的路径设置

先看web.xml 配置

 1 <!-- 加载Spring容器配置 -->
 2     <listener>
 3         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 4     </listener>
 5 
 6     <!-- 设置Spring容器加载所有的配置文件的路径 -->
 7     <context-param>
 8         <param-name>contextConfigLocation</param-name>
 9         <param-value>classpath*:config/applicationContext.xml</param-value>
10     </context-param>

目录结构

技术分享

当我这样配置的时候,无论怎么修改web.xml中的路径设置,启动tomcat,始终无法加载applicationContext.xml.痛苦的折磨后,我发现部署到tomcat里面的只有webRoot目录下的文件。而config文件夹根本没有部署到tomcat里面。

当我把config文件夹移动到WebRoot下面后,发现还是不对,依然无法加载applicationContext.xml文件。原来是【classpath*:config/applicationContext.xml】文件路径写错了。去掉【classpath*:】之后,就可以正确加载。

classpath:会加载类路径下的资源文件。所有将applicationContext.xml放到src下面,这样的配置系统就可以正确加载。(部署到tomcat后在web-inf/classes文件夹下)

classpath*: 会加载src文件下的资源,还会加载包括jar文件的所有资源。

 

以上是关于Spring xml配置文件相对路径问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在基于xml的spring配置中为hibernate.javax.cache.uri属性指定相对路径

spring 类路径资源中的相对路径

使用相对于配置文件的路径引用 Spring 属性文件

如何加载指定路径的Logback.xml

Spring Boot 2.2.1 RELEASE 构建错误相对路径

Java Spring log4j-怎么配置日志输入的相对路径?