1.3. Red Hat build of Quarkus アプリケーションに設定値を注入する
Red Hat build of Quarkus は、MicroProfile Config 機能を使用して設定データをアプリケーションに注入します。コンテキストと依存性注入 (CDI) を使用するか、コード内でメソッドを定義することで、設定にアクセスできます。
@ConfigProperty
アノテーションを使用して、オブジェクトプロパティーをアプリケーションの MicroProfile Config Sources
ファイルのキーにマップします。
次の手順と例は、Red Hat build of Quarkus アプリケーション設定ファイル application.properties
を使用して、Quarkus config-quickstart
プロジェクトに個別のプロパティー設定を注入する方法を示しています。
MicroProfile Config configuration file (src/main/resources/META-INF/microprofile-config.properties
) は、application.properties
ファイルとまったく同じ方法で使用できます。
application.properties
ファイルを使用することが推奨されます。
前提条件
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 を押します。