1.10. 设置自定义配置源


默认情况下,Quarkus 应用从项目的 src/main/resources 子目录中的 application.properties 文件中读取属性。Quarkus 还允许您根据用于外部配置的 MicroProfile 配置规范从其他来源加载应用配置属性。您可以通过定义实现 org.eclipse.microprofile.config. spi.ConfigSource 和 org.eclipse.microprofile .config.spi.ConfigSource 的类,从其他来源加载配置属性。此流程演示了如何在 Quarkus 项目中实施自定义配置源。

前提条件

您有 Quarkus config-quickstart 项目。

流程

  1. 在项目中创建一个类文件,它将实施 org.eclipse.microprofile.config.spi.ConfigSourceProvider 接口。要返回 ConfigSource 对象列表,您必须覆盖 getConfigSources () 方法。

    Example 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());
        }
    }
    Copy to Clipboard Toggle word wrap

  2. 创建实现 org.eclipse.microprofile.config.spi.ConfigSource 接口的 InMemoryConfigSource 类:

    Example 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();
        }
    }
    Copy to Clipboard Toggle word wrap

    1
    getOrdinal () 方法返回 ConfigSource 类的优先级。因此,当多个配置源定义相同的属性时,Quarkus 可以选择由具有最高优先级的 ConfigSource 类定义的相应值。
  1. 在项目的 src/main/resources/META-INF/services/ 子目录中,创建一个名为 org.eclipse.microprofile.config.spi.ConfigSourceProvider 的文件,并在您创建的文件中输入实施 ConfigSourceProvider 的完全限定名称:

    org.eclipse.microprofile.config.spi.ConfigSourceProvider 文件示例:

    org.acme.config.InMemoryConfigSourceProvider
    Copy to Clipboard Toggle word wrap

    要确保在编译和启动应用程序时注册并安装您创建的 ConfigSourceProvider,您必须完成上一步。

  2. 编辑项目中的 GreetingResource.java 文件,以添加以下更新:

    @ConfigProperty(name="my.prop") int value;
    Copy to Clipboard Toggle word wrap
  3. GreetingResource.java 文件中,扩展 hello 方法以使用新属性:

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String hello() {
      return message + " " + name.orElse("world") + " " + value;
    }
    Copy to Clipboard Toggle word wrap
  4. 要以开发模式编译并启动应用程序,请输入以下命令:

    ./mvnw quarkus:dev
    Copy to Clipboard Toggle word wrap
  5. 要验证 /greeting 端点是否返回预期的消息,请打开终端窗口并输入以下命令:

    请求示例

    curl http://localhost:8080/greeting
    Copy to Clipboard Toggle word wrap

  6. 当应用程序成功读取自定义配置时,命令会返回以下响应:

    hello world 1234
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat