1.10. カスタム設定ソースの設定
Quarkus アプリケーションは、デフォルトでプロジェクトの src/main/resources サブディレクトリー内の application.properties ファイルからプロパティーを読み取ります。Quarkus では、外部化された設定の MicroProfile Config 仕様に従い、他のソースからアプリケーション設定プロパティーをロードすることもできます。org.eclipse.microprofile.config.spi.ConfigSource および org.eclipse.microprofile.config.spi.ConfigSourceProvider インターフェイスを実装するクラスを定義することで、アプリケーションは他のソースから設定プロパティーをロードできるようになります。以下の手順では、Quarkus プロジェクトにカスタム設定ソースを実装する方法を説明します。
前提条件
Quarkus config-quickstart プロジェクトがある。
手順
org.eclipse.microprofile.config.spi.ConfigSourceProviderインターフェイスを実装するプロジェクトでクラスファイルを作成します。ConfigSourceオブジェクトのリストを返すには、getConfigSources()メソッドをオーバーライドする必要があります。org.acme.config.InMemoryConfigSourceProviderの例package org.acme.config; import org.eclipse.microprofile.config.spi.ConfigSource; import org.eclipse.microprofile.config.spi.ConfigSourceProvider; import java.util.List; public class InMemoryConfigSourceProvider implements ConfigSourceProvider { @Override public Iterable<ConfigSource> getConfigSources(ClassLoader classLoader) { return List.of(new InMemoryConfigSource()); } }org.eclipse.microprofile.config.spi.ConfigSourceインターフェイスを実装するInMemoryConfigSourceクラスを作成します。org.acme.config.InMemoryConfigSourceの例package org.acme.config; import org.eclipse.microprofile.config.spi.ConfigSource; import java.util.HashMap; import java.util.Map; import java.util.Set; public class InMemoryConfigSource implements ConfigSource { private static final Map<String, String> configuration = new HashMap<>(); static { configuration.put("my.prop", "1234"); } @Override public int getOrdinal() {1 return 275; } @Override public Set<String> getPropertyNames() { return configuration.keySet(); } @Override public String getValue(final String propertyName) { return configuration.get(propertyName); } @Override public String getName() { return InMemoryConfigSource.class.getSimpleName(); } }- 1
getOrdinal()メソッドは、ConfigSourceクラスの優先度を返します。そのため、複数の設定ソースが同じプロパティーを定義している場合でも、Quarkus は最も優先度の高いConfigSourceクラスで定義されている適切な値を選択できます。
プロジェクトの
src/main/resources/META-INF/services/サブディレクトリーにorg.eclipse.microprofile.config.spi.ConfigSourceProviderという名前のファイルを作成し、作成したファイルにConfigSourceProviderを実装するクラスの完全修飾名を入力します。org.eclipse.microprofile.config.spi.ConfigSourceProviderファイルの例:org.acme.config.InMemoryConfigSourceProviderアプリケーションをコンパイルして開始する際に、作成した
ConfigSourceProviderが確実に登録およびインストールされているようにするには、前の手順を完了する必要があります。プロジェクト内の
GreetingResource.javaファイルを編集して、次の更新を追加します。@ConfigProperty(name="my.prop") int value;GreetingResource.javaファイルで、helloメソッドを展開して新しいプロパティーを使用します。@GET @Produces(MediaType.TEXT_PLAIN) public String hello() { return message + " " + name.orElse("world") + " " + value; }以下のコマンドを入力して、開発モードでアプリケーションをコンパイルし、起動します。
./mvnw quarkus:devターミナルウィンドウを開いて次のコマンドを入力し、
/greetingエンドポイントが予期したメッセージを返すことを確認します。要求の例
curl http://localhost:8080/greetingアプリケーションがカスタム設定を正常に読み取ると、コマンドは次のレスポンスを返します。
hello world 1234