1.12. 设置自定义配置源
默认情况下,Quarkus 应用程序从项目的 src/main/resources 子目录中的 application.properties 文件读取属性。使用 Quarkus,您可以根据外部配置的 MicroProfile 配置规范从其他来源加载应用配置属性。您可以通过定义实施 org.eclipse.microprofile.config.spi.ConfigSource 和 org.eclipse.microprofile.config 从其他来源加载配置属性。此流程演示了如何在 Quarkus 项目中实施自定义配置源。
.spi.ConfigSource 的类,使应用能够
前提条件
您有 Quarkus config-quickstart 项目。
对于该项目的完整示例,请下载 Quarkus Quickstarts 存档或克隆 Quarkus Quickstarts Git 存储库,再进入 config-quickstart 目录。
流程
在您的项目中,创建一个实施
org.eclipse.microprofile.config.spi.ConfigSourceProvider接口的新类。覆盖getConfigSources ()方法,以返回自定义ConfigSource对象列表。Example
org.acme.config.InMemoryConfigSourceProviderpackage 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类:Example
org.acme.config.InMemoryConfigSourcepackage 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