1.4. 使用 @ConfigMapping 注解接口


使用 @io.smallrye.config.ConfigMapping 注释来分组配置属性,而不是单独注入多个相关的配置值。以下流程描述了如何使用 Quarkus config-quickstart 项目上的 @ConfigMapping 注释。

先决条件

  • 您已创建了 Quarkus config-quickstart 项目。
  • 您已在项目的 application.properties 文件中定义 greeting.messagegreeting.name 属性。

流程

  1. 查看项目中的 GreetingResource.java 文件,并确保该文件包含下例中所示的内容。要使用 @ConfigProperty 注释将另一个配置源的配置属性注入此类,您必须导入 java.util.Optionalorg.eclipse.microprofile.config.inject.ConfigProperty 软件包。

    GreetingResource.java 文件示例

    package org.acme.config;
    
    import java.util.Optional;
    
    import jakarta.ws.rs.GET;
    import jakarta.ws.rs.Path;
    import jakarta.ws.rs.Produces;
    import jakarta.ws.rs.core.MediaType;
    
    import org.eclipse.microprofile.config.inject.ConfigProperty;
    
    @Path("/greeting")
    public class GreetingResource {
    
        @ConfigProperty(name = "greeting.message")
        String message;
    
        @ConfigProperty(name = "greeting.suffix", defaultValue="!")
        String suffix;
    
        @ConfigProperty(name = "greeting.name")
        Optional<String> name;
    
        @GET
        @Produces(MediaType.TEXT_PLAIN)
        public String hello() {
            return message + " " + name.orElse("world") + suffix;
        }
    }
    Copy to Clipboard Toggle word wrap

  2. src/main/java/org/acme/config 目录中创建一个 GreetingConfiguration.java 文件。在文件中添加 ConfigMap 和 Optional 的导入语句:

    GreetingConfiguration.java 文件示例

    package org.acme.config;
    
    import io.smallrye.config.ConfigMapping;
    import io.smallrye.config.WithDefault;
    import java.util.Optional;
    
    @ConfigMapping(prefix = "greeting") 
    1
    
    public interface GreetingConfiguration {
        String message();
    
        @WithDefault("!") 
    2
    
        String suffix();
    
        Optional<String> name();
    }
    Copy to Clipboard Toggle word wrap

    1
    prefix 属性是可选的。例如,在这种情况下,前缀为 greeting
    2
    如果没有设置 greeting.suffix,则使用 ! 作为默认值。
  1. 使用 @Inject 注释将 GreetingConfiguration 实例注入到 GreetingResource 类中,如下所示:

    注意

    此片段将标注为 @ConfigProperty 的三个字段替换为 config-quickstart 项目初始版本中的 @ConfigProperty。

    GreetingResource.java 文件示例

    package org.acme.config;
    
    import jakarta.inject.Inject;
    import jakarta.ws.rs.GET;
    import jakarta.ws.rs.Path;
    import jakarta.ws.rs.Produces;
    import jakarta.ws.rs.core.MediaType;
    
    @Path("/greeting")
    public class GreetingResource {
    
        @Inject
        GreetingConfiguration config;
    
        @GET
        @Produces(MediaType.TEXT_PLAIN)
        public String hello() {
            return config.message() + " " + config.name().orElse("world") + config.suffix();
        }
    }
    Copy to Clipboard Toggle word wrap

  2. 在开发模式下编译并启动应用程序:

    ./mvnw quarkus:dev
    Copy to Clipboard Toggle word wrap
    重要

    如果没有为类属性提供值,则应用无法编译,并且返回 io.smallrye.config.ConfigValidationException 错误来指示缺少值。这不适用于带有默认值的可选字段或字段。

  3. 要验证端点是否返回消息,请在新的终端窗口中输入以下命令:

    curl http://localhost:8080/greeting
    Copy to Clipboard Toggle word wrap
  4. 您会收到以下信息:

    hello quarkus!
    Copy to Clipboard Toggle word wrap
  5. 要停止应用程序,请按 Ctrl+C。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat