1.8. プログラムで設定にアクセスする
コード内にメソッドを定義して、アプリケーションの設定プロパティー値を取得できます。そうすることで、設定プロパティー値を動的に検索したり、CDI Bean または Jakarta REST (旧名 JAX-RS) リソースのいずれかのクラスから設定プロパティー値を取得したりできます。
org.eclipse.microprofile.config.ConfigProvider.getConfig() メソッドを使用して設定にアクセスできます。config オブジェクトの getValue() メソッドは、設定プロパティー値を返します。
前提条件
- Quarkus Maven プロジェクトがある。
手順
メソッドを使用して、アプリケーションコード内のクラスまたはオブジェクトの設定プロパティーの値にアクセスします。取得する値がプロジェクトの設定ソースに設定されているかどうかに応じて、以下のいずれかのメソッドを使用できます。
たとえば、
application.propertiesファイルで、プロジェクトの設定ソースで設定されるプロパティーの値にアクセスするには、getValue()メソッドを使用します。String <variable-name> = ConfigProvider.getConfig().getValue("<property-name>", <data-type-class-name>.class);たとえば、データ型が
Stringで、コード内のmessage変数に割り当てられているgreeting.messageプロパティーの値を取得するには、次の構文を使用します。String message = ConfigProvider.getConfig().getValue("greeting.message",String.class);任意の値またはデフォルト値を取得し、
application.propertiesファイルまたはアプリケーションの別の設定ソースで定義されていない場合は、getOptionalValue()メソッドを使用します。Optional<String> <variable-name> = ConfigProvider.getConfig().getOptionalValue("<property-name>", <data-type-class-name>.class);たとえば、オプションで、データ型が
Stringで、コード内のname変数に割り当てられている、オプションのgreeting.nameプロパティーの値を取得するには、次の構文を使用します。Optional<String> name = ConfigProvider.getConfig().getOptionalValue("greeting.name", String.class);
次の抜粋は、プログラムによる設定へのアクセスを使用して、前述の GreetingResource クラスのバリアントを示します。
src/main/java/org/acme/config/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.Config;
import org.eclipse.microprofile.config.ConfigProvider;
import org.eclipse.microprofile.config.inject.ConfigProperty;
@Path("/greeting")
public class GreetingResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
Config config = ConfigProvider.getConfig();
String message = config.getValue("greeting.message", String.class);
String suffix = config.getOptionalValue("greeting.suffix", String.class).orElse("!");
Optional<String> name = config.getOptionalValue("greeting.name", String.class);
return message + " " + name.orElse("world") + suffix;
}
}