2016-10-03 9 views
0

我々は今、我々は${country}値は、展開時に実際の値に置き換えられたい ミュールダイナミックプロパティファイルの参照

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

の下に与えられたとして、我々は、プロパティファイルの参照を持っている流れを持っています。

私たちは、ESB上で環境変数としてcountryの値を設定し、それを展開する方法の1つを知っています。しかし、我々はそのために以下の理由で行うにはしたくない:

  1. 我々は並列

    で複数の国のために同じコードベースを展開
  2. 環境プロパティは、ラバ、実行の開始時にのみ設定でき

  3. もしそうなら、私env変数をcountry=UKに設定し、英国向けに展開しました。後でMY用にデプロイしたいので、やりたくないcountry=MYを設定してESBを再起動する必要があります。

私は、他のより良い方法

+0

、パッケージ内のファイルの参照を持っており、以下のように実行時に必要に応じて、サーバと同じを上書きするオプションを持っているあなたが与えられたいずれかのあまり引用符が含まれていました例をコンテキストプロパティのプレースホルダを定義します。 StackOverflowのために追加した場合は引用符が少なすぎます。コードの書式を編集して修正してください。 – techraf

答えて

0
を見てみたいことがありオプション -M-Dmule.country=your-value

で構内ミュールサーバー上で実行することができます教えてください

私たちは、同じアプリケーションの複数のバージョンを並行して実行する必要があったのと同様の状況でした。このために使用したソリューションは、プロパティファイルをビルドと共にパッケージ化し、動的要素(環境ベース)を持たないようにすることでした。たとえば、この場合、httpdemo.usa.propertiesを構築し、それをアプリケーションとともにパッケージ化します。 Jenkinsを使用してビルドやリリースを管理して以来、これはかなり簡単でした。ビルドがリリースされると、特定の "国"関連のすべてのプロパティを含むJenkinsの設定ファイルを参照します。この国をビルド定義のパラメータとして渡すこともできます。カスタムMavenプラグインを使用して、アプリケーション内のプロパティファイルをJenkinsプロパティファイルの新しいプロパティに置き換えます。

問題のもう1つの解決策は、使用したい "国"固有のアプリケーションに命名規則に従い、春の豆を使用してプロパティをフェッチすることです。たとえば、

<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" />