2016-07-20 8 views
1

IDのような要求がHTTPリクエストを介して渡され、そのIDに応じて動的にプロパティ値を呼び出す必要があります。私は dgc.metamodel.CommunityToSync=Community2 dgc.metamodel.DomainToSync=Domain2Muleフローの実行時に動的にプロパティ値を取得する

のように必要な別のIDについて dgc.metamodel.CommunityToSync=Community1 dgc.metamodel.DomainToSync=Domain1

のような性質を必要とする1つのIDについては

それはミュールでこれを行うことは可能ですか?

答えて

0

AFAIK、プロパティファイルは、サーバーの初回起動時に読み込まれます。多くのプロパティが参照されるのは1つのキー(一意)のみですが。

しかし、この要件に対応するためには、Javaコードを使用する必要があります。このコードは、リクエスト(id)に基づいて特定のプロパティファイルを読み込む責任があります。その後、他の用途のために財産を読んで、それを変数に設定します。異なる結果を得るためにhttp://localhost:8081/prop?id=1またはhttp://localhost:8081/prop?id=2

private Properties prop = new Properties(); 
private InputStream input = null; 

public Object transformMessage(MuleMessage message, String outputEncoding) throws TransformerException {  
    String id = ((ParameterMap)message.getInboundProperty("http.query.params")).get("id"); 
    input = getClass().getResourceAsStream("../property" + id + ".properties"); 
    prop.load(input); 

    message.setInvocationProperty("communityToSync", prop.getProperty("dgc.metamodel.CommunityToSync")); 
    message.setInvocationProperty("domainToSync", prop.getProperty("dgc.metamodel.DomainToSync")); 

私は、単純な流れ

<flow name="propertyFlow"> 
    <http:listener config-ref="HTTP_Listener_Configuration" path="/prop" allowedMethods="GET" doc:name="HTTP"/> 
    <custom-transformer class="example.ReadProperty" doc:name="Java"/> 
    <logger message="CommunityToSync = #[flowVars.communityToSync], DomainToSync = #[flowVars.domainToSync]" level="INFO" doc:name="Logger"/> 
</flow> 

ブラウザを介してそれを実行して、それをテストしました。

+0

Muleサーバーの起動中に例外が発生しました。エラーが発生してデプロイメントが失敗しました。 'name'プロパティ名を持つBeanを作成中にエラーが発生しました:Beanの初期化に失敗しました。ネストされた例外 'java.util.ArrayList'型のプロパティ値を 'messageProcessors'プロパティの必須型 'java.util.List'に変換できませんでした。プロパティ 'messageProcessors [0]'の[test_project.ReadProperty]タイプの値を必須のタイプ[org.mule.api.processor.MessageProcessor]に変換できません:一致するエディタまたは変換ストラテジが見つかりませんでした 'このメッセージの戻り値としてメッセージを渡していますtransformMessageメソッド。 – Arkade

+0

クラスAbstractMessageTransformerを拡張してこの問題を修正しました。 – Arkade

0

あなたが最初のマップにプロパティを読み取ることによって、これを達成することができます

あなたがそうのような春を使用して、マップにそれらを直接読み込むことができます。

<spring:beans> 
     <spring:bean id="appProps" class="org.springframework.beans.factory.config.PropertiesFactoryBean"> 
      <spring:property name="singleton" value="true"/> 
      <spring:property name="location" value="classpath:application.properties"/> 
     </spring:bean> 
    </spring:beans> 

そして、MELを使用して、流れの中で動的にアクセス次のようになります。

そして、必要に応じてキーストリングを作成できます。

+0

問題は、異なるファイルから(同じキーを使用して)プロパティを実行時に動的に読み取る方法です。 –

0

groovyを使用して要件に応じてbsedをチェックし、必要に応じてプロパティを送信できます。

関連する問題