プロパティの設定

Mule 4.1 の標準サポートは 2020 年 11 月 2 日に終了しました。このバージョンの Mule は、拡張サポートが終了する 2022 年 11 月 2 日にその すべてのサポート​が終了しました。

このバージョンの Mule を使用する CloudHub には新しいアプリケーションをデプロイできなくなります。許可されるのはアプリケーションへのインプレース更新のみになります。

標準サポートが適用されている最新バージョンの Mule 4 にアップグレード​することをお勧めします。これにより、最新の修正とセキュリティ機能強化を備えたアプリケーションが実行されます。

プロパティプレースホルダやシステムプロパティなどのプロパティを設定できます。

プロパティプレースホルダ

Mule 設定では、 Ant​ スタイルのプロパティプレースホルダを使用できます。例:

<email:smtp-config name="config">
    <email:smtp-connection host="${smtp.host}" port="${smtp.port}"/>
</email:smtp-config>

後続のセクションで説明されているように、これらのプレースホルダの値は、さまざまな方法で使用可能にすることができます。

グローバルプロパティ

<global-property>​ 要素を使用すると、Mule 設定内 (別の Mule 設定ファイル内など) からプレースホルダの値を設定できます。グローバルプロパティ構文を使用して、​.yaml​ または ​.properties​ ファイルの値を参照し、設定プロパティまたはセキュアな設定プロパティに連動する新しい (グローバル) プロパティを作成できます。設定プロパティを参照するには、プロパティファイルのセクションを読み取ります。

<global-property name="smtp.host" value="smtp.mail.com"/>
<global-property name="smtp.subject" value="Subject of Email"/>

プロパティファイル

カスタムファイルのプロパティを読み込むには、カスタムプロパティファイルを ​src/main/resources​ に配置し、​<configuration-properties>​ タグを使用します。

<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns="http://www.mulesoft.org/schema/mule/core"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd">

<configuration-properties file="smtp.yaml"/>

<flow name="myProject_flow1">
    <logger message="${propertyFromFile}" doc:name="System Property Set in Property File"/>
</flow>

複数のプロパティファイルを読み込むには、読み込むファイルごとに ​<configuration-properties/>​ タグを定義します。

  • <configuration-properties/>​ タグで参照される複数のファイルでプロパティが定義されている場合、最初の定義が保持されます。

これらのファイルは、Mule プロジェクト内の ​src/main/resources​ に配置されている必要があります。または、絶対パスを使用することもできます。

サポートされているファイル

設定プロパティでは、YAML 設定ファイル (​.yaml​) とプロパティ設定ファイル (​.properties​) の両方がサポートされています。 両方のファイル形式でサポートされている型は ​String​ のみです。自分にとって読みやすく、編集しやすい形式を使用してください。

YAML ファイルの例:

<configuration-properties file="ports.yaml"/>

ports.yaml​ を次に示します。

smtp:
    port: "8957"
http:
    port: "8081"

プロパティファイルの例:

<configuration-properties file="ports.properties"/>

ports.properties​ を次に示します。

smtp.port=8957
http.port=8081

ファイルプロパティ

プレースホルダの値は、ファイルの内容全体になることもあります。プレースホルダの値は、次のような文字列値になります。

properties-file.txt
Some content
<mule:set-payload value="${file::properties-file.txt}"/>

ペイロードの値は ​"Some content"​ になります。. 他のプロパティファイルと同様に、これらのファイルは Mule プロジェクト内の ​src/main/resources​ に配置されている必要があります。絶対パスを使用することもできます。

この方法は、設定ファイルをモジュール化する場合に役立ちます。設定ファイル、SQL クエリ、変換から大きなコンテンツを抽出して設定ファイルを明確化し、そのコンテンツを再利用できます。

システムプロパティ

Mule をオンプレミスで実行するときに JDK システムプロパティを設定し、後でそのプロパティを使用して Mule アプリケーションでコンポーネントまたはモジュールを設定できます。プロパティを指定する方法は 2 つあります。

  • Mule インスタンスを開始するときに、コマンドラインから指定します。

    mule -M-Dsmtp.username=JSmith -M-Dsmtp.password=ChangeMe
  • $MULE_HOME/conf​ ディレクトリに配置されている ​wrapper.conf​ ファイルを編集し、プロパティごとにエントリを追加します。

    wrapper.java.additional.999=-Dsmtp.username=JSmith
    wrapper.java.additional.1000=-Dsmtp.password=ChangeMe

設定についての詳細は、​システムプロパティ​を参照してください。

カスタムプロパティプロバイダ

Mule API を使用して、カスタムプロパティプロバイダの実装を作成できます。詳細は、​「カスタム設定プロパティプロバイダ」​を参照してください。

Anypoint Studio でシステムプロパティを設定する

Anypoint Studio でプロジェクトを起動するときに、[Run Configurations (設定を実行)] メニューでプロパティを追加できます。

  1. Package Explorer でプロジェクトを右クリックします。

  2. [Run As (別のユーザとして実行)]​ > ​[Run Configurations (設定を実行)]​ をクリックします。

  3. [Arguments (引数)]​ タブを選択します。

  4. [VM arguments (VM 引数)]​ 項目に引数 (プロパティ名の前に ​-D​) を追加します。

    Arguments+Tab

    これで、アプリケーションをデプロイするたびに Studio でプロパティを使用できるようになりました。次の構文を使用してプロパティを参照できます。

    <logger message="${propertyFromJVMArg}" doc:name="System Property Set in Studio through JVM args"/>

環境変数

環境変数はさまざまな方法で定義でき、アプリケーションから環境変数にアクセスする方法も複数あります。環境変数の定義方法に関係なく、次の構文を使用して参照することをお勧めします。

${variableName}

OS の環境変数

OS で定義された変数を参照するには、次の構文を使用します。

<logger message="${USER}" doc:name="Environment Property Set in OS" />

Anypoint Studio で環境変数を設定する

Studio の [Run Configuration (設定を実行)] メニューで変数を設定できます。

  1. Package Explorer でプロジェクトを右クリックします。

  2. [Run As (別のユーザとして実行)]​ > ​[Run Configurations (設定を実行)]​ を選択します。

  3. [Environment (環境)] タブを選択します。

  4. [New (新規)]​ ボタンをクリックし、変数に名前と値を割り当てます。

    Environment+Tab

これで、デプロイするたびに Studio で変数を使用できるようになりました。次の構文を使用して変数を参照できます。

<logger message="${TEST_ENV_VAR}" doc:name="Environment Property Set in Studio"/>
OS で定義された変数を参照する構文と、Studio で定義された変数を参照する構文は同じです。Studio で定義された変数で、OS で定義された同じ名前の変数を置き換えるかどうかを、変数の作成時に UI の対応するラジオボタンをオンにして選択することができます。
Environment+Tab2

プロパティファイルの動的な設定

一般的な設定のユースケースは、プロパティに連動するファイル (​env​ など) を設定して、使用するファイル (開発フェーズの ​development-properties​ ファイルや本番ファイルなど) を決定することです。

<configuration-properties file="${env}-properties.yaml"/>

そのため、​env​ プロパティの値によって、設定プロパティの読み込みに使用するファイルが決まります。その ​env​ プロパティは、グローバルプロパティ、システムプロパティ、または環境プロパティで設定できます。設定プロパティのデフォルト値を定義する方法として、グローバルプロパティを使用できます。グローバルプロパティと同じ名前のシステムおよび環境プロパティは、そのグローバルプロパティよりも優先されます。

<global-property name="env" value="dev"/>

<configuration-properties file="${env}-properties.yaml"/>

env​ プロパティのデフォルト値は ​dev​ になりますが、システムプロパティや環境プロパティで上書きできます。この設定は、Anypoint Studio でメタデータを解決するために​必要​になります。コマンドラインで渡されるプロパティのデフォルト値を定義しないと、それらの値に連動するすべてのメッセージプロセッサのアプリケーションモデルを作成するときにエラーが発生します。

他にも、設定プロパティのプレースホルダは別の設定プロパティから読み込まれるプロパティに連動できないという点も考慮する必要があります。上記の例では、プロパティ ​env​ は設定プロパティで定義できていません。以下の例は、​正しくありません​。

<configuration-properties file="file-with-env-property.yaml"/>

<configuration-properties file="${env}-properties.yaml"/>

これには、他のプロパティ種別 (セキュア設定プロパティやカスタム設定プロパティなど) も含まれます。

Runtime Manager でプロパティ値を設定する

アプリケーションを ​Runtime Manager​ にデプロイする場合、Runtime Manager コンソールでプロパティを設定することもできます。これらは、​CloudHub にデプロイ​するときや、​すでに実行中のアプリケーション​で定義できます。

環境変数またはアプリケーションプロパティを作成する手順は、次のとおりです。

  1. Anypoint Platform アカウントにログインします。

  2. [Runtime Manager] をクリックします。

  3. [Deploy Application (アプリケーションをデプロイ)]​ をクリックして新しいアプリケーションをデプロイするか、実行中のアプリケーションを選択して ​[Manage Application (アプリケーションを管理)]​ をクリックします。

  4. [Settings (設定)]​ セクションで ​[Properties (プロパティ)]​ タブを選択します。

プロパティ階層

設定プロパティは上書き可能です。Mule Runtime Engine は、次の階層を使用して、同じ名前の場合に優先されるプロパティを決定します。この階層では、システムプロパティは上部にあるため、他のプロパティ種別よりも優先されます。

  1. デプロイメントプロパティ

  2. システムプロパティ

  3. 環境プロパティ

  4. アプリケーションプロパティ (設定プロパティ、セキュア設定プロパティ、および他のカスタム設定プロパティを含む)

  5. グローバルプロパティ

そのため、たとえば、​size​ という名前の設定プロパティがシステムプロパティとして定義されていて、​size​ という名前のアプリケーション設定プロパティもある場合、アプリケーションの値は、最も優先度の高いプロパティ (この場合はシステムプロパティ) の値になります。

プロパティの値は、階層の上位に位置する他のプロパティから派生させることができます。そのため、アプリケーションプロパティの値は、環境プロパティ、システムプロパティ、デプロイメントプロパティから派生させることができます。システムプロパティの値は、デプロイメントプロパティから派生させることができます (以下同様)。たとえば、​env​ という名前のシステムプロパティがある場合、アプリケーション設定プロパティの値を ​file.${env}.xml​ のように設定できます。. 一方、アプリケーションプロパティは、同じファイルで定義されていないアプリケーションプロパティの値に連動することはできません。たとえば、セキュア設定プロパティは設定プロパティに連動できません。

この階層構造のため、ファイルを読み込む Mule コンポーネントはアプリケーションやグローバルプロパティに連動することはできません。Mule Runtime Engine は、コンポーネントとアプリケーションプロパティを同じ階層で読み込みます。たとえば、Mule がアプリケーションプロパティを読み込む前に ​import​ コンポーネントを読み込むと、​import​ コンポーネントの読み込みが必要になった時点でプロパティが解決されていないため、デプロイは失敗します。