2010-08-31 211 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> 

相關問題