2012-08-14 18 views
1

我正在使用Java 1.6和Spring 3.1.1。我試圖將外部屬性文件讀入Spring上下文中。以下是難點:第一個屬性文件包含下一個屬性文件的路徑。例如:在Spring上下文中導入/過濾屬性

首先屬性文件在$ {的user.home}:

resource.dir=C:/users/smith 
config.dir=${resource.dir}/configuration 

第二屬性文件$ {config.dir}(在第一屬性文件中定義):

datasource.name=jdbc:mysql://dbserver:3306/test 
datasource.prop1=etc 
datasource.prop2=etc 

所以我需要讀取第一個文件,處理這些屬性,並使用它們到達第二個文件。

使用Spring PropertyPlaceholderConfigurer只讓我到第一個文件。我已經讀過,你的應用上下文中只能有一個PropertyPlaceholderConfigurer,這似乎是真的。 [編輯:見解https://jira.springsource.org/browse/SPR-6428。]

任何人都知道最好的方法來做到這一點?

編輯:這顯然很容易做到,如果你正在ant中運行構建,不幸的是我的項目使用Maven。你使用PROPERTY標籤完成第一步,它會自動地解析下一步的所有內容,允許你將類路徑設置爲$ {cfg.dir}目錄等等。然後你可以從「正常」中讀取屬性這些目錄。我希望春天或Maven,讓我相同的功能,但是暫時還沒有發現答案...

ANT例如:

<property file="${user.home}/global.properties" /> 

<target name="run-some-stuff"> 
    <java classname="com.mystuff.App" failonerror="true" fork="yes"> 
     <classpath> 
      <path location="${cfg.dir}" /> 
      <path location="${resource.dir}" /> 
     </classpath> 
     </java> 
    </target> 
+0

這可能不會對你有所幫助,但它可能有多個佔位符配置器;您可以爲每個配置器分配一個不同的佔位符前綴。 – dnault 2012-08-14 18:56:13

+1

是的,但在這種情況下,這並不能幫助我。我在這裏找到了對這個限制的解釋:https://jira.springsource.org/browse/SPR-6428 – user1071914 2012-08-15 02:09:39

回答

1

如果資源目錄僅僅是用戶的主目錄,你可以做以下的XML ...

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"> 

    <context:property-placeholder location="file:${user.home}/configuration"/> 
</beans> 

或者,如果你喜歡做這樣的代碼,你也可以使用@PropertySource註釋

這工作,因爲在SPR在3.1中,PropertySource抽象統一了系統屬性,環境變量以及屬性文件的屬性。 user.home是一個系統屬性。

+0

不幸的是,我只能在中途找到我 - 然後我需要讀取屬性文件並過濾它,用「真正的價值「 - 然後去獲得另一組屬性文件。春天似乎對此很不高興。 – user1071914 2012-08-15 02:14:29