2013-04-02 69 views
5

我的問題看起來很簡單,但我無法解決它。我有一個屬性文件,其中包含所有環境(dev,qa,prod)的配置細節。具有字符串連接的彈簧屬性佔位符

config.properties

dev.maxLength=2000 
qa.maxLength=4000 

我們持有的主機名,環境映射父屬性文件。

hosts.properties

host1=dev 
host2=qa 

屬性名host1存儲在豆hostname

<bean id="hostname" 
    factory-bean="localhostInetAddress" 
    factory-method="getHostName"/> 

要解決的配置屬性名字我加入字符串如下, ${${**hostname**}.maxLength}${dev.maxLength}

我嘗試使用規劃環境地政司沒有成功應該得到解決。我得到Could not resolve placeholder例外。我如何連接屬性佔位符中的bean值?動態屬性名稱是如何構建的?

Spring版本3.2

回答

2

我改變PropertyPlaceholderConfigurerProperties解決這一問題的VM選項。在SpEL中可以訪問 <util:properties/>

實施例: "#{prop[host+'.'+'maxLength']}"

其中host是一個字符串豆。

+0

介意分享你的XML嗎?我想做同樣的事情,但不知道你提到的改變爲屬性... –

2

這將是最好有環境的具體性能在它自己的文件,並使用Spring配置文件。 例如,我有4個僅用於數據庫配置的xml文件,local.db.xml,dev.db.xml,qa.db.xml和prod.db.xml。 在每個db.xml中,我將配置文件設置爲適當的值。

我local.db.xml有

<beans profile="db.local" .. > 

對於啓動Tomcat,我指定如下

-Dspring.profiles.active=db.local 
+0

我不能使用環境變量/ JVM性能,這是一個政策的約束。 – user2235506

12

要連接從Spring屬性佔位符分析的值,您需要使用單個quoutes('')轉義它們的值,並使用#{}通過SpEL表達式包裝佔位表達式。

<bean id="myService" class=""com.services.MyService"> 
    ... 
    <property name="endpointAddress" value="#{'${server}' + ':' + '${port}' + '${endpoint}'}" /> 
</bean> 

其中:

服務器= http://domain.host.com

端口= 7777

端點= /服務/爲MyService

其結果將是:

http://domain.host.com:7777/services/myservice