1.6. 高级配置映射
以下高级映射步骤是特定于红帽构建的 Quarkus 的扩展,位于 MicroProfile 配置规范之外。
1.6.1. 使用 @ConfigMapping 注解接口 复制链接链接已复制到粘贴板!
使用 @io.smallrye.config.ConfigMapping 注释来分组配置属性,而不是单独注入多个相关的配置值。以下流程描述了如何使用 Quarkus config-quickstart 项目上的 @ConfigMapping 注释。
先决条件
-
您已创建了 Quarkus
config-quickstart项目。 -
您已在项目的
application.properties文件中定义greeting.message和greeting.name属性。
步骤
查看项目中的
GreetingResource.java文件,并确保该文件包含下例中所示的内容。要使用@ConfigProperty注释将另一个配置源的配置属性注入此类,您必须导入java.util.Optional和org.eclipse.microprofile.config.inject.ConfigProperty软件包。GreetingResource.java文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
src/main/java/org/acme/config目录中创建一个GreetingConfiguration.java文件。在文件中添加ConfigMap 和的导入语句:OptionalGreetingConfiguration.java文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用
@Inject注释将GreetingConfiguration实例注入到GreetingResource类中,如下所示:注意此片段将标注为
@ConfigProperty的三个字段替换为config-quickstart项目初始版本中的 @ConfigProperty。GreetingResource.java文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在开发模式下编译并启动应用程序:
./mvnw quarkus:dev
./mvnw quarkus:devCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要如果没有为类属性提供值,则应用无法编译,并且返回
io.smallrye.config.ConfigValidationException错误来指示缺少值。这不适用于带有默认值的可选字段或字段。要验证端点是否返回消息,请在新的终端窗口中输入以下命令:
curl http://localhost:8080/greeting
curl http://localhost:8080/greetingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您会收到以下信息:
hello quarkus!
hello quarkus!Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 要停止应用程序,请按 Ctrl+C。
1.6.2. 使用嵌套对象配置 复制链接链接已复制到粘贴板!
您可以定义嵌套在另一个接口中的接口。此流程演示了如何在 Quarkus config-quickstart 项目中创建和配置嵌套接口。
先决条件
-
您已创建了 Quarkus
config-quickstart项目。 -
您已在项目的
application.properties文件中定义greeting.message和greeting.name属性。
步骤
查看项目中的
GreetingResource.java。该文件包含带有hello ()方法的GreetingResource类,它会在/greeting端点上发送 HTTP 请求时返回一条消息:GreetingResource.java文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
GreetingConfiguration.java类文件创建GreetingConfiguration.java 类文件。此类包含hello ()方法的外部化配置,该方法在GreetingResource类中定义的:GreetingConfiguration.java文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建嵌套在
GreetingConfiguration实例中的ContentConfig接口,如下例所示:GreetingConfiguration.java文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意ContentConfig接口的方法名称是内容。要确保将属性绑定到正确的接口,当您为此类定义配置属性时,请在前缀中使用内容。这样,您还可以防止属性名称冲突和意外的应用程序行为。在
application.properties文件中定义greeting.content.prize-amount和greeting.content.recipients配置属性。以下示例显示了为
GreetingConfiguration实例和ContentConfig接口定义的属性:application.properties文件示例greeting.message=hello greeting.name=quarkus greeting.content.prize-amount=10 greeting.content.recipients=Jane,John
greeting.message=hello greeting.name=quarkus greeting.content.prize-amount=10 greeting.content.recipients=Jane,JohnCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
@Inject注释,而不是三个@ConfigProperty字段注释,将GreetingConfiguration实例注入到GreetingResource类中,如以下示例中所述。另外,您必须更新/greeting端点返回的消息字符串,为新的 greeting.content.prize-amount 和属性设置的值。greeting.content.recipientsGreetingResource.java文件示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在开发模式下编译并启动应用程序:
./mvnw quarkus:dev
./mvnw quarkus:devCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要如果没有为类属性提供值,应用程序将无法编译,并且您收到表示缺少值的
jakarta.enterprise.inject.spi.DeploymentException异常。这不适用于带有默认值的可选字段和字段。要验证端点是否返回消息,请打开一个新的终端窗口并输入以下命令:
curl http://localhost:8080/greeting
curl http://localhost:8080/greetingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 这时将显示一条消息,其中包含 输出的两行。第一行显示问候语,第二行报告奖品的接收者和奖品量,如下所示:
hello quarkus! [Jane, John] receive total of candies: 10
hello quarkus! [Jane, John] receive total of candies: 10Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 要停止应用程序,请按 Ctrl+C。
您可以使用类似以下示例的 bean 验证注解 @ConfigMapping 注解的类:
您的项目必须包含 quarkus-hibernate-validator 依赖项。