第7章 プロパティー式

プロパティー式は、設定内のプロパティーの値を置き換えるために使用できるプロパティー参照とプレーンテキスト文字列の組み合わせになります。

変数と同様に、Quarkus でプロパティー式を使用して、設定プロパティーの値をハードコーディングする代わりに置き換えることができます。プロパティー式は、java.util.Properties がアプリケーションの設定ソースからプロパティーの値を読み取ると解決されます。

これは、コンパイル時に設定プロパティーが設定から読み取られる場合に、プロパティー式もコンパイル時に解決されることを意味します。設定プロパティーがランタイム時にオーバーライドされる場合、その値はランタイム時に解決されます。

プロパティー式は、複数の設定ソースを使用して解決できます。これは、ある設定ソースで定義されているプロパティーの値を使用して、別の設定ソースで使用するプロパティー式を拡張できることを意味します。

式のプロパティーの値を解決できず、式のデフォルト値を設定しない場合は、アプリケーションで NoSuchElementException が発生します。

7.1. プロパティー式の使用例

このセクションでは、Quarkus アプリケーションを設定する際に、プロパティー式を使用して柔軟性を高める方法の例を紹介します。

  • 設定プロパティーの値の置き換え:

    プロパティー式を使用して、設定でプロパティー値のハードコーディングを回避できます。以下の例のように、${<property_name>} 構文を使用して、設定プロパティーを参照する式を作成します。

    application.properties

    remote.host=quarkus.io
    callable.url=https://${remote.host}/

    callable.url プロパティーの値は https://quarkus.io/ に解決されます。

  • 特定の設定プロファイルに固有のプロパティー値の設定:

    以下の例では、%dev 設定プロファイルとデフォルトの設定プロファイルは、異なるホストアドレスでデータソース接続 URL を使用するように設定されます。アプリケーションを起動する設定プロファイルに応じて、データソースドライバーは、プロファイルに設定したデータベース URL を使用します。

    application.properties

    %dev.quarkus.datasource.jdbc.url=jdbc:mysql://localhost:3306/mydatabase?useSSL=false
    quarkus.datasource.jdbc.url=jdbc:mysql://remotehost:3306/mydatabase?useSSL=false

    設定プロファイルごとにカスタム application.server プロパティーの異なる値を設定することにより、同じ結果を簡単な方法で実現できます。次に、例に示すように、アプリケーションのデータベース接続 URL でプロパティーを参照できます。

    application.properties

    %dev.application.server=localhost
    application.server=remotehost
    
    quarkus.datasource.jdbc.url=jdbc:mysql://${application.server}:3306/mydatabase?useSSL=false

    application.server プロパティーは、アプリケーションの実行時に選択するプロファイルに応じて適切な値に解決されます。

  • プロパティー式のデフォルト値の設定:

    プロパティー式のデフォルト値を定義できます。Quarkus は、式を展開するために必要なプロパティーの値が設定ソースのいずれからも解決されない場合に、デフォルト値を使用します。次の構文を使用して、式のデフォルト値を設定できます。

    ${<expression>:<default_value>}

    以下の例では、データソース URL のプロパティー式は、application.server プロパティーのデフォルト値として mysql.db.server を使用します。

    application.properties

    quarkus.datasource.jdbc.url=jdbc:mysql://${application.server:mysql.db.server}:3306/mydatabase?useSSL=false

  • プロパティー式のネスト化:

    プロパティー式を別のプロパティー式内にネスト化することで、プロパティー式を作成できます。ネスト化されたプロパティー式が展開されると、内部の式が最初に展開されます。

    ${<outer_property_expression>${<inner_property_expression>}}
  • 複数のプロパティー式:

    以下に示すように、2 つ以上のプロパティー式を結合することができます。

    ${<first_property>}${<second_property>}
  • プロパティー式と環境変数の組み合わせ:

    プロパティー式を使用して、環境変数の値を置き換えることができます。以下の例の式は、HOST 環境変数に設定される値を application.host プロパティーの値として置き換えます。HOST 環境変数が設定されていない場合、application.hostremote.host プロパティーの値をデフォルトとして使用します。

    application.properties

    remote.host=quarkus.io
    application.host=${HOST:${remote.host}}