1.10. 设置自定义配置源
默认情况下,Quarkus 应用从项目的 src/main/resources 子目录中的 application.properties 文件中读取属性。Quarkus 还允许您根据用于外部配置的 MicroProfile 配置规范从其他来源加载应用配置属性。您可以通过定义实现 org.eclipse.microprofile.config. spi.ConfigSource 和 org.eclipse.microprofile 的类,从其他来源加载配置属性。此流程演示了如何在 Quarkus 项目中实施自定义配置源。
.config.spi.ConfigSource
前提条件
您有 Quarkus config-quickstart 项目。
流程
在项目中创建一个类文件,它将实施
org.eclipse.microprofile.config.spi.ConfigSourceProvider接口。要返回ConfigSource对象列表,您必须覆盖getConfigSources ()方法。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