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

时间:2010-08-31 16:48:12

标签: java spring properties

我正在将属性从Spring配置文件中移动到单独的属性文件中。这包含在

的配置文件中
<bean class="org.springframework.beans.factory.config.PropertyPlaceHolderConfigurer">
  <property name="location" value="file:properties/${CONFIG_MODE}/service.properties" />
</bean>

目前,属性文件的位置是相对于服务器进程的当前工作目录

这就要求必须从特定的工作目录启动进程,更糟糕的是允许它可以获取完全不同的属性文件(当然是远程) - 例如,如果它是从工作开始的话目录设置为旧版本的服务。

我想使用相对于包含配置文件的目录的路径来引用属性文件。

查看FileSystemResource,似乎createRelative可能是我需要的,但我无法弄清楚如何在配置文件中使用它。

谢谢,

史蒂夫

3 个答案:

答案 0 :(得分:11)

我不知道如何做到这一点。

但是,您可以从类路径加载属性文件:

<bean class="org.springframework.beans.factory.config.PropertyPlaceHolderConfigurer">
  <property name="location" value="classpath:path/to/service.properties" />
</bean>

属性文件的类路径位置是一个更容易预测的情况,只要您的类路径设置正确,它就会起作用。

答案 1 :(得分:9)

使用3.1,如果需要,可以将文件保留在类路径之外。

使用以下bean定义

<bean class=
    "org.springframework.beans.factory.config.PropertyPlaceHolderConfigurer">
  <property name="location" 
    value="file:${props.path}/service.properties" />
</bean>

您可以使用java命令行

设置属性
java ... -Dprops.path=path/to/where/it/is

答案 2 :(得分:0)

假设您已将config.properties文件放在WEB-INF中 然后:

<bean id="propertyConfigurerInternal"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
    <value>classpath:../config.properties</value>
</property>