第 4 章 将配置值注入 Quarkus 应用程序


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

您可以使用 @ConfigProperty 注释将对象属性映射到应用的 MicroProfile ConfigSources 文件中的键。此流程演示了如何将单个属性配置注入 Quarkus config-quickstart 项目中。

先决条件

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

流程

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

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

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

    src/main/resources/application.properties

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

    重要

    使用 Quarkus 作为 Quarkus 属性的前缀。

  3. 查看 GreetingResource.java 文件,并确保它包括以下导入语句:

    import org.eclipse.microprofile.config.inject.ConfigProperty;
    import java.util.Optional;
    Copy to Clipboard Toggle word wrap
  4. 通过使用 @ConfigProperty 注解它们来定义对应的属性,如下例所示:

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

    @ConfigProperty(name = "greeting.message") 
    1
    
    String message;
    
    @ConfigProperty(name = "greeting.suffix", defaultValue="!") 
    2
    
    String suffix;
    
    @ConfigProperty(name = "greeting.name")
    Optional<String> name; 
    3
    Copy to Clipboard Toggle word wrap

    1
    如果没有为此属性提供值,应用程序将失败并抛出以下异常信息:
    javax.enterprise.inject.spi.DeploymentException: No config value type [class java.lang.String] for: greeting.message
    2
    如果没有为 greeting.suffix 提供值,则 Quarkus 会将它解析为默认值。
    3
    如果 Optional 参数没有值,它将没有为 greeting.name 返回值。
    注意

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

  5. 编辑 hello 方法以返回以下信息:

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

    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String hello() {
        return message + "  " + name.orElse("world") + suffix;
    }
    Copy to Clipboard Toggle word wrap

  6. 以开发模式编译并启动应用程序:

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

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

    这个命令返回以下输出:

    hello quarkus!
    Copy to Clipboard Toggle word wrap
  8. CTRL+C 停止应用程序。

4.1. 使用 @ConfigProperties 注解类

作为单独注入多个相关配置值的替代选择,您可以使用 @io.quarkus.arc.config.ConfigProperties 注解来对组配置属性使用。以下流程演示了在 Quarkus config-quickstart 项目中使用 @ConfigProperties 注释。

先决条件

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

流程

  1. 查看 GreetingResource.java 文件,并确保它包括以下导入语句:

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

    import java.util.Optional;
    import javax.inject.Inject;
    Copy to Clipboard Toggle word wrap

  2. src/main/java/org/acme/config 目录中创建一个文件 GreetingConfiguration.java
  3. ConfigPropertiesOptional 导入添加到 GreetingConfiguration.java 文件中:

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

    import io.quarkus.arc.config.ConfigProperties;
    import java.util.Optional;
    import javax.inject.Inject;
    Copy to Clipboard Toggle word wrap

  4. GreetingConfiguration.java 文件中的 问候 属性创建一个 GreetingConfiguration 类:

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

    @ConfigProperties(prefix = "greeting") 
    1
    
    public class GreetingConfiguration {
    
        private String message;
        private String suffix = "!"; 
    2
    
        private Optional<String> name;
    
        public String getMessage() {
            return message;
        }
    
        public void setMessage(String message) {
            this.message = message;
        }
    
        public String getSuffix() {
            return suffix;
        }
    
        public void setSuffix(String suffix) {
            this.suffix = suffix;
        }
    
        public Optional<String> getName() {
            return name;
        }
    
        public void setName(Optional<String> name) {
            this.name = name;
        }
    }
    Copy to Clipboard Toggle word wrap

    1
    prefix 是可选的。如果没有指定前缀,它由类的名称决定。在本例中,前缀为 greeting
    2
    如果没有设置 greeting.suffix! 是默认值。
  5. 使用 @Inject 注解将 GreetingConfiguration 类注入 GreetingResource 类:

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

    @Path("/greeting")
    public class GreetingResource {
    
        @Inject
        GreetingConfiguration config;
    
        @GET
        @Produces(MediaType.TEXT_PLAIN)
        public String hello() {
            return config.getMessage() + " " + config.getName().orElse("world") + config.getSuffix();
        }
    }
    Copy to Clipboard Toggle word wrap

  6. 以开发模式编译并启动应用程序:

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

    如果没有为类属性提供值,应用程序无法编译,您会收到 javax.enterprise.inject.spi.DeploymentException,它表示缺失的值。这不适用于带有 默认值的 Optional 字段和字段。

  7. 在新终端窗口中输入以下命令来验证端点是否返回消息:

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

    hello quarkus!
    Copy to Clipboard Toggle word wrap
  9. CTRL+C 停止应用程序。
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2026 Red Hat
返回顶部