2010-08-31 186 views
10

我将属性从我的Spring配置文件内移动到一个单独的属性文件。这包括在配置文件中与引用弹簧属性文件使用路径相对于配置文件

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

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

这就要求进程必须从一个特定的工作目录开始,甚至更糟糕的是允许(可以认为是远程的)它可能拾取完全不同的属性文件的可能性 - 例如,如果它是以工作目录设置为服务的较旧版本。

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

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

感谢,

史蒂夫

回答

10

我不知道的方式做到这一点。

你能做什么,但是,是加载属性从classpath文件:

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

你的属性文件的类路径位置是一个更可预测的情况,只要它会作为您classpath正确设置。

+0

很好的解决方案 - 谢谢。唯一的问题(我承认这根本不是一个严重的问题)是,有时能够直接查看/编辑属性文件很有用 - 例如在紧急情况下,或者做一些快速测试。将它放在罐子里并不妨碍这一点,但会使它有点麻烦。 – stevec 2010-08-31 16:59:13

+2

@stevec:它不必位于JAR文件中,它可以很容易地位于类路径中的文件系统目录中。 – skaffman 2010-08-31 17:01:59

+0

当我使用'@Value(“$ {thing.inside.service.properties}”)'这个工作吗? – 2014-02-13 09:43:07

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 
0

假设你放置了config.properties设置属性文件WEB-INF 然后里面:

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

相关问题