1.4. Red Hat build of Quarkus アプリケーションに設定値を注入する
Red Hat build of Quarkus は、MicroProfile の設定 機能を使用して、設定データをアプリケーションに挿入します。コンテキストと依存性注入 (CDI) を使用するか、コード内でメソッドを定義することで、設定にアクセスできます。
@ConfigProperty アノテーションを使用して、オブジェクトプロパティーをアプリケーションの MicroProfile Config Sources ファイルのキーにマップします。
次の手順と例は、Red Hat build of Quarkus アプリケーション設定ファイル application.properties を使用して、Quarkus config-quickstart プロジェクトに個別のプロパティー設定を注入する方法を示しています。
application.properties ファイルと同様に、MicroProfile Config プロパティーファイル (src/main/resources/META-INF/microprofile-config.properties) を使用できます。
ただし、application.properties を使用するのが推奨される方法です。
前提条件
config-quickstart プロジェクトを作成している。
このプロジェクトの完成例を参照するには、Quarkus Quickstarts アーカイブをダウンロードするか、Quarkus Quickstarts Git リポジトリーのクローンを作成して config-quickstart ディレクトリーに移動してください。
手順
-
src/main/resources/application.propertiesファイルを開きます。 設定プロパティーを設定ファイルに追加します。
<property_name>はプロパティー名に、<value>はプロパティーの値に置き換えます。<property_name>=<value>以下の例は、Quarkus
config-quickstartプロジェクトでgreeting.messageプロパティーおよびgreeting.nameプロパティーの値を設定する方法を示しています。application.propertiesファイルの例greeting.message=hello greeting.name=quarkus重要アプリケーションを設定する際に、アプリケーション固有プロパティーの前に
quarkusの文字列を付けないでください。quarkusの接頭辞は、フレームワークレベルで Quarkus を設定するために予約されています。quarkusをアプリケーション固有プロパティーの接頭辞として使用すると、アプリケーションの実行時に予期しない結果が生じる可能性があります。プロジェクトの
GreetingResource.javaファイルを確認します。このファイルには、/greetingエンドポイントで HTTP リクエストを送信した場合にメッセージを返すhello()メソッドが含まれるGreetingResourceクラスがあります。GreetingResource.javaファイルの例package org.acme.config; import java.util.Optional; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.MediaType; import org.eclipse.microprofile.config.inject.ConfigProperty; @Path("/greeting") public class GreetingResource { String message; Optional<String> name; String suffix; @GET @Produces(MediaType.TEXT_PLAIN) public String hello() { return message + " " + name.orElse("world") + suffix; } }ここで示した例では、
hello()メソッドのmessageおよびname文字列の値は初期化されていません。エンドポイントが呼び出され、この状態で正常に開始されると、アプリケーションはNullPointerExceptionをスローします。message、name、およびsuffixフィールドを定義し、アノテーション@ConfigPropertyを付け、greeting.messageおよびgreeting.nameプロパティーに定義した値と一致させます。アノテーション@ConfigPropertyを使用して、各文字列の設定値を注入します。以下に例を示します。GreetingResource.javaファイルの例package org.acme.config; import java.util.Optional; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; import jakarta.ws.rs.Produces; import jakarta.ws.rs.core.MediaType; import org.eclipse.microprofile.config.inject.ConfigProperty; @Path("/greeting") public class GreetingResource { @ConfigProperty(name = "greeting.message")1 String message; @ConfigProperty(name = "greeting.suffix", defaultValue="!")2 String suffix; @ConfigProperty(name = "greeting.name") Optional<String> name;3 @GET @Produces(MediaType.TEXT_PLAIN) public String hello() { return message + " " + name.orElse("world") + suffix; } }- 1
greeting.message文字列の値を設定しない場合、アプリケーションは失敗し、jakarta.enterprise.inject.spi.DeploymentException: io.quarkus.runtime.configuration.ConfigurationException: Failed to load config value of type class java.lang.String for: greeting.messageの例外をスローします。- 2
greeting.suffixの値を設定しないと、Quarkus はその値をデフォルト値に解決します。- 3
greeting.nameプロパティーを定義しない場合、nameの値は使用できません。nameにOptionalパラメーターを設定しているため、この値が使用できない場合でもアプリケーションは実行されます。
注記設定した値を注入するには、
@ConfigPropertyを使用します。@ConfigPropertyアノテーションが付けられたメンバーの@Injectアノテーションを含める必要はありません。
開発モードでアプリケーションをコンパイルして起動します。
./mvnw quarkus:devエンドポイントがメッセージを返すことを確認するには、新しいターミナルウィンドウに以下のコマンドを入力します。
curl http://localhost:8080/greetingこのコマンドは、以下の出力を返します。
hello quarkus!- アプリケーションを停止するには、CTRL+C を押します。