プロパティプレースホルダーの設定

接続をはじめとする Mule アプリケーション設定の静的値を使用する代わりに、​.yaml​ または ​.properties​ ファイルを作成してプロパティを格納し、アプリケーションからプロパティを参照することができます。

プロパティファイルを設定することで、アプリケーションの構成およびメンテナンス性が向上します。

.yaml​ ファイルでは、プロパティは次の形式になります。

http:
  path: "/service"
  port: "10000"
  host: "my-api.cloudhub.io"

.properties​ ファイルでは、プロパティは次の形式になります。

http.path=/service
http.port=10000
http.host=my-api.cloudhub.io

プロパティファイルを作成して設定する

  1. Studio で ​[Package Explorer]​ ビューに移動して、プロジェクトの ​/src/main/resources​ フォルダーを右クリックします。

  2. [New (新規)]​ > ​[File (ファイル)]​ を選択します。

    new-file-properties

  3. ファイルの名前を選択して、拡張子を ​.yaml​ または ​.properties​ (この形式を使用する場合) に設定します。

  4. ファイルを編集して、必要なプロパティおよび値を定義します。

  5. プロパティファイルを Mule アプリケーションに追加します。

    • Studio から:

      1. [Global Elements (グローバル要素)]​ タブを開き、​[Create (作成)]​ ボタンをクリックします。

      2. 「Configuration Properties (設定プロパティ)」という名前の要素を検索し、​[OK]​ をクリックします。

      3. […​]​ ボタンをクリックして、​.yaml​ または ​.properties​ ファイルに移動します。

    • XML エディターから:

      1. <configuration-properties>​ 要素を ​<mule>​ 内に含めて、プロパティファイル名を使用してその ​file​ パラメーターを設定します。次に例を示します。

        <mule>
          <configuration-properties
            file="myConfiguration.yaml"
            doc:name="Configuration properties"
            doc:id="872422be-3571-4a52-a383-a2b0e16859d7" />`
          ...
        </mule>

アプリケーションでプロパティを使用する

プロパティファイルを設定してプロジェクトに追加したら、次のような構文を使用してその属性を参照できます: ${propertyContainer.propertyName}​。

前のセクションで設定した例に基づくと、​path​ 値および ​port​ 値を使用するには、構文はそれぞれ ​${http.path}​ および ​${http.port}​ になります。

たとえば、グローバル HTTP 要求設定を設定してプロパティファイルで定義された値を使用できます。

  • Studio から:

properties-file
  • XML エディターから

    <http:request-config
      name="HTTP_Request_config"
      doc:name="HTTP Request
      configuration" doc:id="7120494c-0540-4ad1-a118-f5b6db3f1456"
      basePath="${http.path}" >
    		<http:request-connection
          host="${http.host}"
          port="${http.port}" />
    </http:request-config>

アプリケーションがデプロイされると、プロパティ値がさまざまなソースから計算され、静的にプレースホルダーを置き換えて、ソースコードに直接書き込まれたようになります。

前の例に基づくと、設定は次のようになります。

<http:request-config
  name="HTTP_Request_config"
  doc:name="HTTP Request
  configuration" doc:id="7120494c-0540-4ad1-a118-f5b6db3f1456"
  basePath="/service" >
		<http:request-connection
      host="my-api.cloudhub.io"
      port="10000" />
</http:request-config>

コンテキストに基づく特殊文字のエスケープはありません。結果の値は参照元のコンテキスト内で有効である必要があります。

DataWeave スクリプトを含む次の例を考えてみます。

<ee:transform>
  <ee:message>
    <ee:set-payload>
      <![CDATA[
        %dw 2.0
        output application/json
        ---
        {
          "message": "${message}",
        }
      ]]>
    </ee:set-payload>
  </ee:message>
</ee:transform>

.properties​ ファイルのコンテンツは次のようになります。

message=I love $

プロパティ置換が行われると、アプリケーションは次のようになります。

<ee:transform>
  <ee:message>
    <ee:set-payload>
      <![CDATA[
        %dw 2.0
        output application/json
        ---
        {
          "message": "I love $",
        }
      ]]>
    </ee:set-payload>
  </ee:message>
</ee:transform>

ドル記号 ($) は特別な意味を持ち、エスケープする必要があるため、この出力は無効な DataWeave スクリプトです。​「Dataweave - 特殊文字のエスケープ」​を参照してください。DataWeave スクリプトが解析される前にプロパティプレースホルダーが置き換えられることを覚えておいてください。

競合を解決するには、プロパティファイル内の値をエスケープできます。

message=I love \$

または、プロパティプレースホルダーの代わりに DataWeave の ​p 関数​を使用することもできます。

<ee:transform>
  <ee:message>
    <ee:set-payload>
      <![CDATA[
        %dw 2.0
        output application/json
        ---
        {
          "message": Mule::p("message"),
        }
      ]]>
    </ee:set-payload>
  </ee:message>
</ee:transform>

プロパティはスクリプトの実行時に評価され、解析時にはスクリプトは構文的に有効なままになります。