2017-07-28 12 views
0

ここで私の必要条件は、Javaクラスを持つ1つのmuleアプリケーションを作成したことです。いくつかの値はハードコーディングされていないので、外部化しようとしています。私はこの値をmule-app.propertiesファイルに保存し、以下のようにFileInputStreamを使用しました。mule/java - javaクラスからjar依存関係にあるプロパティファイルを読み込みます

String propFileName = "src/main/app/mule-app.properties" 
Properties property = new Properties(); 
property.load(new FileInputStream(propFileName)); 

しかし、このコードはCloudHubにデプロイする必要があります。そのファイルが見つかりませんでした。私は、その罰金ローカルで実行している両方のケースについて

String propFileName = "target/classes/mule-app.properties" 

として、ファイル名の所与のパスを試みたが、「ファイルが見つかりません」というようCloudHubで同じ結果が得られます。

解決策は何ですか?

別のことは、異なる環境に関連するすべてのプロパティを保持している共通のコードがあることです。この共通コードのパッケージ化は、jar形式で行われます。ですから、私は上記のコードで使用しているプロパティを保持し、jar自体から読み込むことができます。

はいの場合、どのように?

答えて

0

これを達成するには、1つのことができます。フェッチするプロパティごとに式コンポーネントセット変数を使用する。

<expression-component doc:name="setVariable"><![CDATA[flowVars.clientId="${poc.clientId}";]]></expression-component> 

このフロー変数に関係なく、それは即ちmule-app.propertiesを維持またはcloudhubランタイム特性にされている場合のJavaクラスにアクセス可能です。

Javaクラスでは、以下のコードを使用してこのフロー変数を読み取ることができます。

String clientId = eventContext.getMessage().getInvocationProperty("clientId"); 
2

Cloudhubに展開してプロパティファイルを外部化する場合は、Cloudhubプロパティタブを使用して値を外部化することをお勧めします。
REF: - https://docs.mulesoft.com/runtime-manager/deploying-to-cloudhub#properties-tab

とJavaクラスには、使用してプロパティの値を選ぶことができます - そのような単純なSystem.getProperty("yourpropertykey") を:)

性質を維持に関しては、共通のjarアプリでファイルを、あなたは迎えに<context:property-placeholder/>を使用する必要があります一般的なjarアプリケーションのクラスパスからプロパティファイルを作成し、それをホストアプリケーションのラブフローで使用することができます。

-1

以下のサンプルコードを使用してください。

FileInputStream fi = new FileInputStream(System.getProperty("C:\Users\userName\ 
     AnypointStudio\workspace\test\src\main\resources\my-app1.propertie"); 

Properties prop = new Properties(); 
prop.load(fi) 
+1

これは間違いなく動作しますが、クラウドやオンデマンドでの展開後はプロパティを読み取ることができません。これはパスの場所全体を書き込むのは良い習慣ではありません。 –

関連する問題