第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 プロパティーの値の設定方法を示しています。

    src/main/resources/application.properties

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

    重要

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

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

    import org.eclipse.microprofile.config.inject.ConfigProperty;
    import java.util.Optional;
    Copy to Clipboard Toggle word wrap
  4. 以下の例のように @ConfigProperty のアノテーションを付けて、対応するプロパティーを定義します。

    src/main/java/org/acme/config/GreetingResource.java

    @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 メソッドを編集して、以下のメッセージを返します。

    src/main/java/org/acme/config/GreetingResource.java

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String hello() {
        return message + "  " + name.orElse("world") + suffix;
    }
    Copy to Clipboard Toggle word wrap

  6. 開発モードでアプリケーションをコンパイルして起動します。

    ./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 ファイルを確認し、以下のインポートステートメントが含まれることを確認します。

    src/main/java/org/acme/config/GreetingResource.java

    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 のインポートを GreetingConfiguration.java ファイルに追加します。

    src/main/java/org/acme/config/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 クラスを作成します。

    src/main/java/org/acme/config/GreetingConfiguration.java

    @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. @Inject アノテーションを使用して GreetingConfiguration クラスを GreetingResource クラスに注入します。

    src/main/java/org/acme/config/GreetingResource.java

    @Path("/greeting")
    public class GreetingResource {
    
        @Inject
        GreetingConfiguration greetingConfiguration;
    
        @GET
        @Produces(MediaType.TEXT_PLAIN)
        public String hello() {
            return message + " " + name.orElse("world") + suffix;
        }
    }
    Copy to Clipboard Toggle word wrap

  6. 開発モードでアプリケーションをコンパイルして起動します。

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

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

  7. エンドポイントがメッセージを返すことを確認するには、新しいターミナルウィンドウに以下のコマンドを入力します。

    curl http://localhost:8080/greeting
    Copy to Clipboard Toggle word wrap
  8. 以下のメッセージが表示されます。

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

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

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

前提条件

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

手順

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

    src/main/java/org/acme/config/GreetingConfiguration.java

    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 クラスおよびそのプロパティーの設定について示しています。

    src/main/java/org/acme/config/GreetingConfiguration.java

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

  3. 以下の例のように、GreetingConfiguration クラス内にネストされたクラスを追加します。

    src/main/java/org/acme/config/GreetingConfiguration.java

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

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

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

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

    src/main/resources/application.properties

    greeting.message = hello
    greeting.name = quarkus
    greeting.content.prize-amount=10
    greeting.content.recipients=Jane,John
    Copy to Clipboard Toggle word wrap

  5. @Inject アノテーションを使用して GreetingConfiguration クラスを GreetingResource クラスに注入します。

    src/main/java/org/acme/config/GreetingResource.java

    @Path("/greeting")
    public class GreetingResource {
    
        @Inject
        GreetingConfiguration greetingConfiguration;
    
        @GET
        @Produces(MediaType.TEXT_PLAIN)
        public String hello() {
            return message + " " + name.orElse("world") + suffix;
        }
    }
    Copy to Clipboard Toggle word wrap

  6. 開発モードでアプリケーションをコンパイルして起動します。

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

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

  7. エンドポイントがメッセージを返すことを確認するには、新しいターミナルウィンドウに以下のコマンドを入力します。

    curl http://localhost:8080/greeting
    Copy to Clipboard Toggle word wrap
  8. 以下のメッセージが表示されます。

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

@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 ファイルを確認し、以下のインポートステートメントが含まれることを確認します。

    src/main/java/org/acme/config/GreetingConfiguration.java

    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 ファイルに追加します。

    src/main/java/org/acme/config/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. @Inject アノテーションを使用して GreetingConfiguration クラスを GreetingResource クラスに注入します。

    src/main/java/org/acme/config/GreetingResource.java

    @Path("/greeting")
    public class GreetingResource {
    
        @Inject
        GreetingConfiguration greetingConfiguration;
    
        @GET
        @Produces(MediaType.TEXT_PLAIN)
        public String hello() {
            return message + " " + name.orElse("world") + suffix;
        }
    }
    Copy to Clipboard Toggle word wrap

  4. 開発モードでアプリケーションをコンパイルして起動します。

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

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

  5. エンドポイントがメッセージを返すことを確認するには、新しいターミナルウィンドウに以下のコマンドを入力します。

    curl http://localhost:8080/greeting
    Copy to Clipboard Toggle word wrap
  6. 以下のメッセージが表示されます。

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

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

Theme

© 2025 Red Hat