Flex Gateway新着情報
Governance新着情報
Monitoring API Managerプロパティプレースホルダーやシステムプロパティなどのプロパティを設定できます。
Mule 設定では、 Ant スタイルのプロパティプレースホルダーを使用できます。例:
<email:smtp-config name="config">
<email:smtp-connection host="${smtp.host}" port="${smtp.port}"/>
</email:smtp-config>
後続のセクションで説明されているように、これらのプレースホルダーの値は、さまざまな方法で使用可能にすることができます。
また、プロパティプレースホルダー値の解決をエスケープすることもできます。
<logger message="\${property.value}"/>
プロパティの値を返す代わりに、Logger コンポーネントは文字列 "${property.value}"
を返します。エスケープ文字 \
を使用して、プロパティのプレフィックス (${
文字シーケンス) の解決をエスケープすることもできます。
<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
プレースホルダーの値は、ファイルのコンテンツ全体になることもあります。プレースホルダーの値は、次のような文字列値になります。
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 でプロジェクトを起動するときに、[Run Configurations (設定を実行)] メニューでプロパティを追加できます。
Package Explorer でプロジェクトを右クリックします。
[Run As (別のユーザーとして実行)] > [Run Configurations (設定を実行)] をクリックします。
[Arguments (引数)] タブを選択します。
[VM arguments (VM 引数)] 項目に引数 (プロパティ名の前に -D) を追加します。
これで、アプリケーションをデプロイするたびに Studio でプロパティを使用できるようになりました。次の構文を使用してプロパティを参照できます。
<logger message="${propertyFromJVMArg}" doc:name="System Property Set in Studio through JVM args"/>
環境変数はさまざまな方法で定義でき、アプリケーションから環境変数にアクセスする方法も複数あります。環境変数の定義方法に関係なく、次の構文を使用して参照することをお勧めします。
${variableName}
OS で定義された変数を参照するには、次の構文を使用します。
<logger message="${USER}" doc:name="Environment Property Set in OS" />
Studio の [Run Configuration (設定を実行)] メニューで変数を設定できます。
Package Explorer でプロジェクトを右クリックします。
[Run As (別のユーザーとして実行)] > [Run Configurations (設定を実行)] を選択します。
[Environment (環境)] タブを選択します。
[New (新規)] ボタンをクリックし、変数に名前と値を割り当てます。
これで、デプロイするたびに Studio で変数を使用できるようになりました。次の構文を使用して変数を参照できます。
<logger message="${TEST_ENV_VAR}" doc:name="Environment Property Set in Studio"/>
OS で定義された変数を参照する構文と、Studio で定義された変数を参照する構文は同じです。Studio で定義された変数で、OS で定義された同じ名前の変数を置き換えるかどうかを、変数の作成時に UI の対応するラジオボタンをオンにして選択することができます。 |
一般的な設定のユースケースは、プロパティに連動するファイル (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 コンソールでプロパティを設定することもできます。これらは、CloudHub にデプロイするときや、すでに実行中のアプリケーションで定義できます。
環境変数またはアプリケーションプロパティを作成する手順は、次のとおりです。
Anypoint Platform アカウントにログインします。
[Runtime Manager] をクリックします。
[Deploy Application (アプリケーションをデプロイ)] をクリックして新しいアプリケーションをデプロイするか、実行中のアプリケーションを選択して [Manage Application (アプリケーションを管理)] をクリックします。
[Settings (設定)] セクションで [Properties (プロパティ)] タブを選択します。
設定プロパティは上書き可能です。Mule Runtime Engine は、次の階層を使用して、同じ名前の場合に優先されるプロパティを決定します。この階層では、デプロイメントプロパティは上部にあるため、他のプロパティ種別よりも優先されます。
デプロイメントプロパティ
システムプロパティ
環境プロパティ
アプリケーションプロパティ (設定プロパティ、セキュア設定プロパティ、および他のカスタム設定プロパティを含む)
グローバルプロパティ
そのため、たとえば、size
という名前の設定プロパティがシステムプロパティとして定義されていて、size
という名前のアプリケーション設定プロパティもある場合、アプリケーションの値は、最も優先度の高いプロパティ (この場合はシステムプロパティ) の値になります。
プロパティの値は、階層の上位に位置する他のプロパティから派生させることができます。そのため、アプリケーションプロパティの値は、環境プロパティ、システムプロパティ、デプロイメントプロパティから派生させることができます。システムプロパティの値は、デプロイメントプロパティから派生させることができます (以下同様)。たとえば、env
という名前のシステムプロパティがある場合、アプリケーション設定プロパティの値を file.${env}.xml
のように設定できます。 一方、アプリケーションプロパティは、同じファイルで定義されていないアプリケーションプロパティの値に連動することはできません。たとえば、セキュア設定プロパティは設定プロパティに連動できません。
この階層構造のため、ファイルを読み込む Mule コンポーネントはアプリケーションやグローバルプロパティに連動することはできません。Mule Runtime Engine は、コンポーネントとアプリケーションプロパティを同じ階層で読み込みます。たとえば、Mule がアプリケーションプロパティを読み込む前に import
コンポーネントを読み込むと、import
コンポーネントの読み込みが必要になった時点でプロパティが解決されていないため、デプロイは失敗します。