第4章 Quarkus アプリケーションへの設定値のインジェクション


Red Hat ビルドの Quarkus は MicroProfile Config 機能 を使用して、設定データをアプリケーションにインジェクトします。コンテキストおよびディペンデンシーインジェクション (CDI) を使用するか、コードに定義されたメソッドを使用して、設定にアクセスできます。

@ConfigProperty アノテーションを使用して、オブジェクトプロパティーをアプリケーションの MicroProfile ConfigSources ファイルのキーにマップできます。この手順では、個別のプロパティー設定を Quarkus config-quickstart プロジェクトにインジェクトする方法を説明します。

前提条件

  • Quarkus config-quickstart プロジェクトを作成していること。

手順

  1. src/main/resources/application.properties ファイルを開きます。
  2. 設定プロパティーを設定ファイルに追加します。<KEY> はプロパティー名に、<VALUE> はプロパティーの値に置き換えます。

    <KEY>=<VALUE>
    Copy to Clipboard Toggle word wrap

    以下の例は、Quarkus config-quickstart プロジェクトの greeting.message プロパティーおよび greeting.name プロパティーの値を設定する方法を示しています。

    greeting.message = hello
    greeting.name = quarkus
    Copy to Clipboard Toggle word wrap
    重要

    quarkus を Quarkus プロパティーの接頭辞として使用します。

  3. GreetingResource.java ファイルを確認し、以下の import ステートメントが含まれることを確認します。

    import org.eclipse.microprofile.config.inject.ConfigProperty;
    import java.util.Optional;
    Copy to Clipboard Toggle word wrap
  4. 以下の構文でアノテーションを付けて、同等のプロパティーを定義します。

    @ConfigProperty(name = "greeting.message") 
    1
    
    String message;
    
    @ConfigProperty(name = "greeting.suffix", defaultValue="!") 
    2
    
    String suffix;
    
    @ConfigProperty(name = "greeting.name")
    Optional<String> name; 
    3
    Copy to Clipboard Toggle word wrap
    1
    このプロパティーの値を指定しないと、アプリケーションは失敗し、以下の例外メッセージをスローします。
    javax.enterprise.inject.spi.DeploymentException: No config value of type [class java.lang.String] exists for: greeting.message
    2
    greeting.suffix の値を指定しない場合、Quarkus はこれをデフォルト値に解決します。
    3
    Optional パラメーターに値がない場合は、greeting.name に対する値は返されません。
    注記

    設定した値をインジェクトするには、@ConfigProperty を使用できます。@ConfigProperty アノテーションが付けられたメンバーには、@Inject アノテーションを付ける必要はありません。

  5. hello メソッドを編集して、以下のメッセージを返します。

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String hello() {
        return message + "  " + name.orElse("world") + suffix;
    }
    Copy to Clipboard Toggle word wrap
  6. 開発モードで Quarkus アプリケーションをコンパイルするには、プロジェクトディレクトリーから以下のコマンドを入力します。

    ./mvnw quarkus:dev
    Copy to Clipboard Toggle word wrap
  7. エンドポイントがメッセージを返すことを確認するには、新しいターミナルウィンドウに以下のコマンドを入力します。

    curl http://localhost:8080/greeting
    Copy to Clipboard Toggle word wrap

    このコマンドは、以下の出力を返します。

    hello quarkus!
    Copy to Clipboard Toggle word wrap
  8. アプリケーションを停止するには、CTRL+C を押します。

4.1. @ConfigProperties でのクラスのアノテーション

複数の関連する設定値を個別にインジェクトする代わりに、@io.quarkus.arc.config.ConfigProperties アノテーションを使用して設定プロパティーをグループ化できます。以下の手順では、Quarkus config-quickstart プロジェクトでの @ConfigProperties アノテーションの使用方法を説明しています。

前提条件

  • Quarkus config-quickstart プロジェクトを作成していること。

手順

  1. GreetingResource.java ファイルを確認し、以下の import ステートメントが含まれることを確認します。

    package org.acme.config;
    
    import java.util.Optional;
    import javax.inject.Inject;
    Copy to Clipboard Toggle word wrap
  2. src/main/java/org/acme/config ディレクトリーに GreetingConfiguration.java ファイルを作成します。
  3. @ConfigProperties および @Optional の import を GreetingConfiguration.java ファイルに追加します。

    package org.acme.config;
    
    import io.quarkus.arc.config.ConfigProperties;
    import java.util.Optional;
    Copy to Clipboard Toggle word wrap
  4. GreetingConfiguration.java ファイルに、greeting プロパティーの GreetingConfiguration クラスを作成します。

    @ConfigProperties(prefix = "greeting") 
    1
    
    public class GreetingConfiguration {
    
        private String message;
        private String suffix = "!"; 
    2
    
        private Optional<String> name;
    
        public String getMessage() {
            return message;
        }
    
        public void setMessage(String message) {
            this.message = message;
        }
    
        public String getSuffix() {
            return suffix;
        }
    
        public void setSuffix(String suffix) {
            this.suffix = suffix;
        }
    
        public Optional<String> getName() {
            return name;
        }
    
        public void setName(Optional<String> name) {
            this.name = name;
        }
    }
    Copy to Clipboard Toggle word wrap
    1
    prefix はオプションです。接頭辞を設定しないと、クラス名により決定されます。この例では、greeting になります。
    2
    greeting.suffix が設定されていない場合、! がデフォルト値になります。
  5. コンテキストおよびディペンデンシーインジェクション (CDI) @Inject アノテーションを使用して、属性を GreetingResource クラスにインジェクトします。

    @Inject
    GreetingConfiguration greetingConfiguration;
    Copy to Clipboard Toggle word wrap
  6. 開発モードでお使いのアプリケーションをコンパイルするには、プロジェクトディレクトリーから以下のコマンドを入力します。

    ./mvnw quarkus:dev
    Copy to Clipboard Toggle word wrap
    重要

    クラスプロパティーの値を指定しない場合、アプリケーションは失敗し、javax.enterprise.inject.spi.DeploymentException がスローされ、値が指定されていないことを示します。これは、Optional フィールドおよびデフォルト値のフィールドには適用されません。

4.2. ネストされたオブジェクト設定の使用

既存のクラス内でネストされたクラスを定義できます。この手順では、Quarkus config-quickstart プロジェクトでネストされたクラスの設定を作成する方法を説明します。

前提条件

  • Quarkus config-quickstart プロジェクトを作成していること。

手順

  1. GreetingConfiguration.java ファイルを確認し、以下の import ステートメントが含まれることを確認します。

    import io.quarkus.arc.config.ConfigProperties;
    import java.util.Optional;
    import java.util.List;
    Copy to Clipboard Toggle word wrap
  2. @ConfigProperties アノテーションを使用して GreetingConfiguration.java ファイルに設定を追加します。

    以下の例は、GreetingConfiguration クラスおよびそのプロパティーの設定について示しています。

    @ConfigProperties(prefix = "greeting")
    public class GreetingConfiguration {
    
        public String message;
        public String suffix = "!";
        public Optional<String> name;
    }
    Copy to Clipboard Toggle word wrap
  3. 以下に示す例のようなネストされたクラス設定を追加します。

    @ConfigProperties(prefix = "greeting")
    public class GreetingConfiguration {
    
        public String message;
        public String suffix = "!";
        public Optional<String> name;
        public HiddenConfig hidden;
    
        public static class HiddenConfig {
            public Integer prizeAmount;
            public List<String> recipients;
        }
    }
    Copy to Clipboard Toggle word wrap

    この例では、ネストされたクラス HiddenConfig を示しています。フィールドの名前 (ここでは hidden) が、オブジェクトにバインドされるプロパティーの名前を決定します。

  4. 同等の設定プロパティーを application.properties ファイルに追加します。

    以下の例は、GreetingConfiguration クラスおよび HiddenConfig クラスのプロパティーの値を示しています。

    greeting.message = hello
    greeting.name = quarkus
    greeting.hidden.prize-amount=10
    greeting.hidden.recipients=Jane,John
    Copy to Clipboard Toggle word wrap
  5. 開発モードでお使いのアプリケーションをコンパイルするには、プロジェクトディレクトリーから以下のコマンドを入力します。

    ./mvnw quarkus:dev
    Copy to Clipboard Toggle word wrap
注記

@ConfigProperties のアノテーションが付けられたクラスは、以下に示す例のような Bean Validation アノテーションを付けることができます。

@ConfigProperties(prefix = "greeting")
public class GreetingConfiguration {

    @Size(min = 20)
    public String message;
    public String suffix = "!";
}
Copy to Clipboard Toggle word wrap

プロジェクトには quarkus-hibernate-validator 依存関係が含まれている必要があります。

4.3. @ConfigProperties でのインターフェースのアノテーション

プロパティーを管理する代替方法は、インターフェースとして定義することです。インターフェースに @ConfigProperties のアノテーションを付けると、そのインターフェースは他のインターフェースを拡張でき、インターフェース階層全体のメソッドを使用してプロパティーをバインドできます。

この手順では、Quarkus config-quickstart プロジェクトのインターフェースとしての GreetingConfiguration クラスの実装について説明します。

前提条件

  • Quarkus config-quickstart プロジェクトを作成していること。

手順

  1. GreetingConfiguration.java ファイルを確認し、以下の import ステートメントが含まれることを確認します。

    package org.acme.config;
    
    import io.quarkus.arc.config.ConfigProperties;
    import org.eclipse.microprofile.config.inject.ConfigProperty;
    import java.util.Optional;
    Copy to Clipboard Toggle word wrap
  2. GreetingConfiguration クラスをインターフェースとして GreetingConfiguration.java ファイルに追加します。

    @ConfigProperties(prefix = "greeting")
    public interface GreetingConfiguration {
    
        @ConfigProperty(name = "message") 
    1
    
        String message();
    
        @ConfigProperty(defaultValue = "!")
        String getSuffix(); 
    2
    
    
        Optional<String> getName(); 
    3
    
    }
    Copy to Clipboard Toggle word wrap
    1
    設定プロパティーの名前が getter メソッド命名規則に準拠しないため、@ConfigProperty アノテーションを設定する必要があります。
    2
    この例では、name は設定されていなかったので、対応するプロパティーが greeting.suffix になります。
    3
    メソッド名は getter メソッドの命名規則 (対応するプロパティーは greeting.name) に従い、デフォルト値が必要ないため、@ConfigProperty アノテーションを指定する必要はありません。
  3. 開発モードでお使いのアプリケーションをコンパイルするには、プロジェクトディレクトリーから以下のコマンドを入力します。

    ./mvnw quarkus:dev
    Copy to Clipboard Toggle word wrap
    重要

    interface フィールドの値を指定しないと、アプリケーションが失敗し、javax.enterprise.inject.spi.DeploymentException がスローされ、値が指定されていないことを示します。これは、Optional フィールドおよびデフォルト値のフィールドには適用されません。

トップに戻る
Red Hat logoGithubredditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。 最新の更新を見る.

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

Theme

© 2025 Red Hat