第 9 章 设置自定义配置源


默认情况下,您的 Quarkus 应用从项目的 src/main/resources 子目录中的 application.properties 文件中读取属性。但是,由于 Quarkus 支持 MicroProfile Config,您也可以从其他来源加载应用的配置。您可以通过提供实现 org.eclipse.microprofile.config.spi.ConfigSource 和 org.eclipse.microprofile.config .spi.ConfigSource 接口的类,为您的配置的值引入自定义配置源。此流程演示了如何在 Quarkus 项目中实施自定义配置源。

前提条件

  • 具有 Quarkus config-quickstart 项目。

流程

  1. 在项目中创建 ExampleConfigSourceProvider.java 文件并添加以下导入:

    src/main/java/org/acme/config/ExampleConfigSourceProvider.java

    package org.acme.config;
    
    import java.util.Collections;
    import java.util.HashMap;
    import java.util.Map;
    import java.util.Set;
    
    import org.eclipse.microprofile.config.spi.ConfigSource;
    import org.eclipse.microprofile.config.spi.ConfigSourceProvider;
    Copy to Clipboard Toggle word wrap

  2. 创建一个实施 org.eclipse.microprofile.config.spi.ConfigSourceProvider 接口的类。您必须覆盖其 getConfigSources 方法,才能返回 ConfigSource 对象列表:

    以下示例显示了 ConfigSourceProviderConfigSource 接口的自定义实现:

    src/main/java/org/acme/config/ExampleConfigSourceProvider.java

    public class ExampleConfigSourceProvider implements ConfigSourceProvider {
    
        private final int times = 2;
        private final String name = "example";
        private final String value = "value";
    
        @Override
        public Iterable<ConfigSource> getConfigSources(ClassLoader forClassLoader) {
            InMemoryConfigSource configSource = new InMemoryConfigSource(Integer.MIN_VALUE, "example config source");
            for (int i = 0; i < this.times; i++) {
                configSource.add(this.name + ".key" + (i + 1), this.value + (i + 1));
            }
            return Collections.singletonList(configSource);
        }
    
        private static final class InMemoryConfigSource implements ConfigSource {
    
            private final Map<String, String> values = new HashMap<>();
            private final int ordinal;
            private final String name;
    
            private InMemoryConfigSource(int ordinal, String name) {
                this.ordinal = ordinal;
                this.name = name;
            }
    
            public void add(String key, String value) {
                values.put(key, value);
            }
    
            @Override
            public Map<String, String> getProperties() {
                return values;
            }
    
            @Override
            public Set<String> getPropertyNames() {
                return values.keySet();
            }
    
            @Override
            public int getOrdinal() {
                return ordinal;
            }
    
            @Override
            public String getValue(String propertyName) {
                return values.get(propertyName);
            }
    
            @Override
            public String getName() {
                return name;
            }
        }
    }
    Copy to Clipboard Toggle word wrap

  3. 在项目的 src/main/resources/META-INF/services/ 子目录中,创建一个名为 org.eclipse.microprofile.config.spi.ConfigSourceProvider 的文件,并在您创建的文件中输入实现 ConfigSourceProvider 的类的完全限定域名:

    src/main/resources/META-INF/services/org.eclipse.microprofile.config.spi.ConfigSourceProvider

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

    您必须执行此步骤,以确保在编译和启动应用程序时您创建的 ConfigSourceProvider 已注册并安装。

  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 quarkus!
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat