2016-10-03 70 views
0

我們有,我們有屬性文件參考下面騾子動態屬性文件引用

"context:property-placeholder location="httpdemo.${country}.properties" 

給出一個流量,現在我們希望可以通過實際值在部署時替換${country}值。

正如我們所知,實現它的一種方法是在ESB上將country的值設置爲環境變量並進行部署。但我們並不想這樣做的,由於以下原因:

  1. 我們部署並行

    多個國家相同的代碼庫
  2. 環境屬性只能騾子運行開始時設定,所以如果我將env變量設置爲country=UK並已部署到英國。後來我想再次部署MY,我需要通過設置我們不想做的country=MY重新啓動ESB。

請讓我知道是否有任何其他更好的你可以選擇運行的前提騾服務器的方式

+0

你給要麼含有太多的引號的例子或者如果將它們添加到StackOverflow中,則引號太少。請使用代碼格式編輯和修復它。 – techraf

回答

0

我們有類似的情況,我們需要同時運行同一個應用程序的多個版本。我們使用的解決方案是將屬性文件與構建一起打包,並且沒有動態元素(基於環境)。例如;在這種情況下,我們構建httpdemo.usa.properties並將其與應用程序一起打包。這對我們來說相當簡單,因爲我們使用Jenkins來管理我們的構建和發佈。構建版本發佈後,我們從Jenkins引用配置文件,其中包含所有特定的「國家/地區」相關屬性。你甚至可以通過這個國家作爲構建定義的參數。使用自定義maven插件,我們用Jenkins屬性文件中的新屬性替換應用程序中的屬性文件。

你的問題的另一個解決方案可能是遵循一個命名約定到你想要使用的「country」的應用程序,並使用spring bean獲取屬性。例如;

<spring:beans> 
    <spring:bean id="CountryProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> 
     <spring:property name="singleton" value="true"/> 
     <spring:property name="location" value="${app.name}.properties"/> 
    </spring:bean> 
</spring:beans> 
<http:listener-config name="HTTP_Listener_Configuration" host="localhost" port="5000" doc:name="HTTP Listener Configuration"/> 
<flow name="dynamic_propsFlow"> 
    <http:listener config-ref="HTTP_Listener_Configuration" path="/test" doc:name="HTTP"/> 
    <logger message="#[app.registry.CountryProperties['country.full.name']]" level="INFO" doc:name="Logger"/> 
</flow> 

我的屬性是象下面這樣:

File - dynamic_props_usa.properties 
population=10 
country.full.name=united.states.of.america 

File - dynamic_props_mexico.properties 
population=100 
country.full.name=mexico 

$ {} app.name給你所部署的應用程序的名稱。如果我的應用名爲dynamic_props_usa,則它指dynamic_props_usa.properties。如果是dynamic_props_mexico,則它指dynamic_props_mexico.properties。希望這可以幫助!

0

定義上下文屬性佔位符有一個包中的文件引用,如果需要在運行時下面有一個選項來覆蓋與服務器相同,

<context:property-placeholder location="classpath:app-${mule.env}.properties, file:${mule.config.path}/app-${mule.env}.properties" ignore-resource-not-found="true" ignore-unresolvable="true" />