1.5. 将配置值注入您的红帽构建的 Quarkus 应用程序


红帽构建的 Quarkus 使用 MicroProfile 功能的配置将配置数据注入应用。您可以使用上下文和依赖项注入(CDI)或代码中定义方法来访问配置。

注入配置值的首选选项是使用 @ConfigMapping 注释,但您也可以使用 @ConfigProperty 注释。

使用 @ConfigProperty 注释,您可以将对象属性映射到应用的 MicroProfile Config Sources 文件中的键。

以下流程和示例演示了如何使用红帽构建 Quarkus Application 配置文件 application.properties 将单个属性配置注入 Quarkus config-quickstart 项目。

注意

就像 application. properties 文件一样,您可以使用 MicroProfile 配置属性文件(src/main/resources/META-INF/microprofile-config.properties)。

但是,使用 application.properties 是首选的方法。

先决条件

您已创建了 Quarkus config-quickstart 项目。

注意

对于该项目的完整示例,请下载 Quarkus Quickstarts 存档或克隆 Quarkus Quickstarts Git 存储库,再进入 config-quickstart 目录。

流程

  1. 打开 src/main/resources/application.properties 文件。
  2. 在您的配置文件中添加配置属性,其中 &lt ;property_name& gt; 是属性名称,<value > 是属性值:

    <property_name>=<value>
    Copy to Clipboard Toggle word wrap

    以下示例演示了如何在 Quarkus config-quickstart 项目中设置 greeting.messagegreeting.name 属性的值:

    application.properties 文件示例

    greeting.message=hello
    greeting.name=quarkus
    Copy to Clipboard Toggle word wrap

    重要

    当您配置应用程序时,请不要使用字符串 quarkus 前缀应用程序特定属性。quarkus 前缀用于在框架级别配置 Quarkus。使用 quarkus 作为特定应用程序属性的前缀可能会导致应用程序运行时出现意外的结果。

  3. 查看项目中的 GreetingResource.java Java 文件。该文件包含带有 hello () 方法的 GreetingResource 类,它会在 /greeting 端点上发送 HTTP 请求时返回一条消息:

    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 {
    
        String message;
        Optional<String> name;
        String suffix;
    
    
        @GET
        @Produces(MediaType.TEXT_PLAIN)
        public String hello() {
            return message + " " + name.orElse("world") + suffix;
        }
    }
    Copy to Clipboard Toggle word wrap

    在提供的示例中,hello () 方法中 消息和 名称 字符串的值不会被初始化。当端点被调用时,应用会抛出 NullPointerException,并成功在此状态启动。

  4. 定义 消息namesuffix 字段,并使用 @ConfigProperty 为它们添加注解,这与您为 greeting.message 和 greeting .name 属性定义 的值匹配。使用 @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") 
    1
    
      String message;
    
      @ConfigProperty(name = "greeting.suffix", defaultValue="!") 
    2
    
      String suffix;
    
      @ConfigProperty(name = "greeting.name")
      Optional<String> name; 
    3
    
    
      @GET
      @Produces(MediaType.TEXT_PLAIN)
      public String hello() {
          return message + " " + name.orElse("world") + suffix;
       }
    }
    Copy to Clipboard Toggle word wrap

    1
    如果您没有为 greeting.message 字符串配置值,应用程序会失败并抛出以下异常: jakarta.enterprise.inject.spi.DeploymentException: io.quarkus.runtime.configuration.ConfigurationException: Failed to load config value of type java.lang.String for: greeting.message
    2
    如果没有为 greeting.suffix 配置值,Quarkus 会将它解析为默认值。
    3
    如果没有定义 greeting.name 属性,则 name 的值不可用。即使这个值不可用,应用程序仍然在运行,因为您在 名称 上设置 Optional 参数。
    注意

    要注入配置的值,您可以使用 @ConfigProperty。您不需要为使用 @ConfigProperty 标注的成员包含 @Inject 注释。

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

    ./mvnw quarkus:dev
    Copy to Clipboard Toggle word wrap
  2. 在新终端窗口中输入以下命令来验证端点返回消息:

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

    这个命令返回以下输出:

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

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat