配置 Quarkus 应用程序
前言 复制链接链接已复制到粘贴板!
作为应用程序开发人员,您可以使用红帽构建的 Quarkus 来创建在 OpenShift 和无服务器环境中运行的 Java 编写的基于微服务的应用程序。编译到原生可执行文件的应用程序会占用较少的内存占用空间和快速启动时间。
本指南介绍了如何使用 Eclipse MicroProfile Config 方法或 YAML 格式配置 Quarkus 应用。该流程包括使用 Quarkus config-quickstart 操作创建的配置示例。
先决条件
已安装 OpenJDK (JDK) 11,并且
JAVA_HOME环境变量指定 Java SDK 的位置。- 登录到红帽客户门户网站,从 Software Downloads 页面下载 Red Hat Open JDK 的 Red Hat build。
已安装 Apache Maven 3.8.1 或更高版本。
将 Maven 配置为使用 Quarkus Maven 存储库中的 工件。
- 要了解如何配置 Maven 设置,请参阅开始使用 Quarkus。
对红帽文档提供反馈 复制链接链接已复制到粘贴板!
我们非常感谢您对我们的技术内容提供反馈,并鼓励您告诉我们您的想法。如果您想添加评论,提供见解、纠正拼写错误甚至询问问题,您可以在文档中直接这样做。
您必须有一个红帽帐户并登录到客户门户网站。
要从客户门户网站提交文档反馈,请执行以下操作:
- 选择 Multi-page HTML 格式。
- 点文档右上角的 反馈 按钮。
- 突出显示您要提供反馈的文本部分。
- 点高亮文本旁的添加反馈对话框。
- 在页面右侧的文本框中输入您的反馈,然后单击 Submit。
每次提交反馈时,我们都会自动创建跟踪问题。打开在点 Submit 后显示的链接,并开始监视问题或添加更多注释。
感谢您的宝贵反馈。
使开源包含更多 复制链接链接已复制到粘贴板!
红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。有关更多详情,请参阅我们的首席技术官 Chris Wright 提供的消息。
第 1 章 Red Hat build of Quarkus 配置选项 复制链接链接已复制到粘贴板!
配置选项允许您在单一配置文件中更改应用程序的设置。Quarkus 支持配置配置文件,允许您根据需要对配置集进行分组,并在配置集间切换。
您可以使用 Eclipse MicroProfile 项目中的 MicroProfile 配置规范将配置属性注入到应用中,并使用代码中定义的方法进行配置。默认情况下,Quarkus 从 src/main/resources 目录中的 application.properties 文件中读取属性。
通过将 config-yaml 依赖项添加到项目 pom.xml 文件中,您可以使用 YAML 格式在 application.yaml 文件中添加应用程序属性。
Quarkus 也可以从不同来源读取应用程序属性,如文件系统、数据库或 Java 应用程序可加载的任何源。
第 2 章 创建配置快速启动项目 复制链接链接已复制到粘贴板!
config-quickstart 项目可让您使用 Apache Maven 和 Quarkus Maven 插件使用简单的 Quarkus 应用程序启动并运行。以下流程演示了如何创建 Quarkus Maven 项目。
流程
验证 Maven 是否使用 JDK 11,并且 Maven 版本是否为 3.8.1 或更高版本:
mvn --version
mvn --versionCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果这个命令没有返回 JDK 11,请确保在您的系统中安装 JDK 11 的目录包含在
PATH环境变量中:export PATH=$PATH:/path/to/jdk-11
export PATH=$PATH:/path/to/jdk-11Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入以下命令来生成项目:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令在
config-quickstart目录中创建以下项目:- Maven 项目目录结构
-
org.acme.config.GreetingResource资源 -
在启动应用程序后,您可以在
http://localhost:8080访问的登录页面 - 在原生模式和 JVM 模式中测试应用程序的相关单元测试
-
src/main/docker中的Dockerfile.jvm、Dockerfile.native和Dockerfile.fast-jar文件示例 应用程序配置文件
注意或者,您还可以从 Quarkus quickstart 存档 下载 Quarkus Maven 项目,或克隆
Quarkus QuickstartsGit 存储库。实践位于config-quickstart目录中。
第 3 章 为您的 Quarkus 应用程序生成示例配置文件 复制链接链接已复制到粘贴板!
您可以使用所有可用配置值和应用程序配置的扩展创建 application.properties.example 文件。您可以在安装新扩展后重复这个过程,以查看添加哪些附加配置选项。
先决条件
- 具有 Quarkus Maven 项目。
流程
运行以下命令来创建
application.properties.example文件:./mvnw quarkus:generate-config
./mvnw quarkus:generate-configCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令在
src/main/resources/目录中创建application.properties.example文件。该文件包含通过您安装的扩展公开的所有配置选项。这些选项会被注释掉,并在适用的情况下具有默认值。以下示例显示了
application.properties.example文件中的 HTTP 端口配置条目:#quarkus.http.port=8080
#quarkus.http.port=8080Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 4 章 将配置值注入 Quarkus 应用程序 复制链接链接已复制到粘贴板!
红帽构建的 Quarkus 使用 MicroProfile Config 功能 将配置数据注入应用程序中。您可以通过上下文和依赖项注入(CDI)或使用代码中定义的方法访问配置。
您可以使用 @ConfigProperty 注释将对象属性映射到应用的 MicroProfile ConfigSources 文件中的键。此流程演示了如何将单个属性配置注入 Quarkus config-quickstart 项目中。
先决条件
-
您已创建了 Quarkus
config-quickstart项目。
流程
-
打开
src/main/resources/application.properties文件。 在您的配置文件中添加配置属性,其中 <
;key> 是属性名称,<value> 是属性值:<key>=<value>
<key>=<value>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下示例演示了如何为 Quarkus
config-quickstart项目中的greeting.message和greeting.name属性设置值:src/main/resources/application.properties
greeting.message = hello greeting.name = quarkus
greeting.message = hello greeting.name = quarkusCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要使用
Quarkus作为 Quarkus 属性的前缀。查看
GreetingResource.java文件,并确保它包括以下导入语句:import org.eclipse.microprofile.config.inject.ConfigProperty; import java.util.Optional;
import org.eclipse.microprofile.config.inject.ConfigProperty; import java.util.Optional;Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过使用
@ConfigProperty注解它们来定义对应的属性,如下例所示:src/main/java/org/acme/config/GreetingResource.java
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意要注入配置的值,您可以使用
@ConfigProperty。使用@ConfigProperty注解的成员不需要@Inject注释。编辑
hello方法以返回以下信息:src/main/java/org/acme/config/GreetingResource.java
@GET @Produces(MediaType.TEXT_PLAIN) public String hello() { return message + " " + name.orElse("world") + suffix; }@GET @Produces(MediaType.TEXT_PLAIN) public String hello() { return message + " " + name.orElse("world") + suffix; }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以开发模式编译并启动应用程序:
./mvnw quarkus:dev
./mvnw quarkus:devCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在新终端窗口中输入以下命令来验证端点是否返回消息:
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 停止应用程序。
4.1. 使用 @ConfigProperties 注解类 复制链接链接已复制到粘贴板!
作为单独注入多个相关配置值的替代选择,您可以使用 @io.quarkus.arc.config.ConfigProperties 注解来对组配置属性使用。以下流程演示了在 Quarkus config-quickstart 项目中使用 @ConfigProperties 注释。
先决条件
-
您已创建了 Quarkus
config-quickstart项目。
流程
查看
GreetingResource.java文件,并确保它包括以下导入语句:src/main/java/org/acme/config/GreetingResource.java
import java.util.Optional; import javax.inject.Inject;
import java.util.Optional; import javax.inject.Inject;Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
在
src/main/java/org/acme/config目录中创建一个文件GreetingConfiguration.java。 将
ConfigProperties和Optional导入添加到GreetingConfiguration.java文件中:src/main/java/org/acme/config/GreetingConfiguration.java
import io.quarkus.arc.config.ConfigProperties; import java.util.Optional; import javax.inject.Inject;
import io.quarkus.arc.config.ConfigProperties; import java.util.Optional; import javax.inject.Inject;Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为
文件中的GreetingConfiguration.java问候属性创建一个 GreetingConfiguration 类:src/main/java/org/acme/config/GreetingConfiguration.java
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
@Inject注解将GreetingConfiguration类注入GreetingResource类:src/main/java/org/acme/config/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 重要如果没有为类属性提供值,应用程序无法编译,您会收到
javax.enterprise.inject.spi.DeploymentException,它表示缺失的值。这不适用于带有默认值的Optional 字段和字段。在新终端窗口中输入以下命令来验证端点是否返回消息:
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 停止应用程序。
4.2. 使用嵌套对象配置 复制链接链接已复制到粘贴板!
您可以在现有类中定义嵌套类。此流程演示了如何在 Quarkus config-quickstart 项目中创建嵌套类配置。
先决条件
-
您已创建了 Quarkus
config-quickstart项目。
流程
查看
GreetingConfiguration.java文件,并确保它包括以下导入语句:src/main/java/org/acme/config/GreetingConfiguration.java
import io.quarkus.arc.config.ConfigProperties; import java.util.Optional; import java.util.List;
import io.quarkus.arc.config.ConfigProperties; import java.util.Optional; import java.util.List;Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
@ConfigProperties注释在GreetingConfiguration.java文件中添加配置。以下示例显示了
GreetingConfiguration类及其属性的配置:src/main/java/org/acme/config/GreetingConfiguration.java
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
GreetingConfiguration类中添加一个嵌套类,如下例所示:src/main/java/org/acme/config/GreetingConfiguration.java
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 本例显示了一个嵌套类
ContentConfig。字段的名称(本例中为content)决定了绑定到对象的属性的名称。在
application.properties文件中设置greeting.content.prize-amount和greeting.content.recipients配置属性。以下示例显示了
GreetingConfiguration和ContentConfig类的属性值:src/main/resources/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注解将GreetingConfiguration类注入GreetingResource类,并更新/greeting端点返回的消息字符串,显示您为新greeting.content.prize-amount和greeting.content.recipients属性设置的值:src/main/java/org/acme/config/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 重要如果没有为类属性提供值,应用程序无法编译,您会收到
javax.enterprise.inject.spi.DeploymentException,它表示缺失的值。这不适用于带有默认值的Optional 字段和字段。在新终端窗口中输入以下命令来验证端点是否返回消息:
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 停止应用程序。
使用 @ConfigProperties 注解的类可以使用与以下示例类似的 Bean Validation 注解添加注解:
您的项目必须包含 quarkus-hibernate-validator 依赖项。
4.3. 使用 @ConfigProperties 注解接口 复制链接链接已复制到粘贴板!
管理属性的替代方法是将它们定义为接口。如果您使用 @ConfigProperties 注解接口,接口可以扩展其他接口,您可以使用整个接口层次结构中的方法绑定属性。
此流程演示了 GreetingConfiguration 类的实现作为 Quarkus config-quickstart 项目中的接口。
先决条件
-
您已创建了 Quarkus
config-quickstart项目。
流程
查看
GreetingConfiguration.java文件,并确保它包括以下导入语句:src/main/java/org/acme/config/GreetingConfiguration.java
import io.quarkus.arc.config.ConfigProperties; import org.eclipse.microprofile.config.inject.ConfigProperty; import java.util.Optional;
import io.quarkus.arc.config.ConfigProperties; import org.eclipse.microprofile.config.inject.ConfigProperty; import java.util.Optional;Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
GreetingConfiguration类作为接口添加到GreetingConfiguration.java文件中:src/main/java/org/acme/config/GreetingConfiguration.java
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
@Inject注解将GreetingConfiguration类注入GreetingResource类:src/main/java/org/acme/config/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 重要如果没有为类属性提供值,应用程序无法编译,您会收到
javax.enterprise.inject.spi.DeploymentException,它表示缺失的值。这不适用于带有默认值的Optional 字段和字段。在新终端窗口中输入以下命令来验证端点是否返回消息:
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 停止应用程序。
第 5 章 从代码访问配置 复制链接链接已复制到粘贴板!
您可以使用代码中定义的方法访问配置。您可以实现动态查找,或从 CDI Bean 或 JAX-RS 资源的类检索配置的值。
您可以使用 org.eclipse.microprofile.config.ConfigProvider.getConfig () 方法访问配置。Config 对象的 getValue 方法返回配置属性的值。
先决条件
- 您有一个 Quarkus Maven 项目。
流程
使用以下选项之一访问配置:
要访问已在
application.properties文件中定义的属性的配置,请使用以下语法,其中DATABASE.NAME是分配给databaseName变量的属性名称:String databaseName = ConfigProvider.getConfig().getValue("DATABASE.NAME", String.class);String databaseName = ConfigProvider.getConfig().getValue("DATABASE.NAME", String.class);Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要访问在
application.properties文件中定义的属性的配置,请使用以下语法:Optional<String> maybeDatabaseName = ConfigProvider.getConfig().getOptionalValue("DATABASE.NAME", String.class);Optional<String> maybeDatabaseName = ConfigProvider.getConfig().getOptionalValue("DATABASE.NAME", String.class);Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 6 章 设置配置属性 复制链接链接已复制到粘贴板!
默认情况下,Quarkus 从 src/main/resources 目录中的 application.properties 文件中读取属性。如果您更改了构建属性,请确保重新打包您的应用程序。
Quarkus 在构建期间配置大多数属性。扩展可以将属性定义为可在运行时覆盖的属性,如数据库 URL、用户名和密码,并可特定于您的目标环境。
先决条件
- 您有一个 Quarkus Maven 项目。
流程
要打包 Quarkus 项目,请输入以下命令:
./mvnw clean package
./mvnw clean packageCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下方法之一设置配置属性:
设置系统属性:
输入以下命令,其中 &
lt;key> 是要添加的配置属性的名称,<value> 是属性值:java -D<key>=<value> -jar target/myapp-runner.jar
java -D<key>=<value> -jar target/myapp-runner.jarCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例如,要设置
quarkus.datasource.password属性的值,请输入以下命令:java -Dquarkus.datasource.password=youshallnotpass -jar target/myapp-runner.jar
java -Dquarkus.datasource.password=youshallnotpass -jar target/myapp-runner.jarCopy to Clipboard Copied! Toggle word wrap Toggle overflow 设置环境变量:
输入以下命令,其中 &
lt;key> 是您要设置的配置属性的名称,<value> 是属性值:export <key>=<value> ; java -jar target/myapp-runner.jar
export <key>=<value> ; java -jar target/myapp-runner.jarCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意环境变量名称遵循 Eclipse MicroProfile 的转换规则。将名称转换为大写,并将不是字母数字的任何字符替换为下划线(
_)。使用环境文件:
在当前工作目录中创建
.env文件,并添加配置属性,其中 <PROPERTY_KEY>是属性名称,<value> 是属性值:<PROPERTY_KEY>=<value>
<PROPERTY_KEY>=<value>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意对于开发模式,此文件可以位于项目的根目录中,但建议不要跟踪版本控制中的文件。如果在项目的根目录中创建
.env文件,您可以定义程序以属性形式读取的键和值。使用
application.properties文件。将配置文件放在
$PWD/config/application.properties目录中,应用程序在其中运行,以便该文件中定义的任何运行时属性将覆盖默认配置。注意您还可以在开发模式中使用
config/application.properties功能。将config/application.properties放置到目标目录中。构建工具中的任何清理操作(如mvn clean)也会删除config目录。
第 7 章 属性表达式 复制链接链接已复制到粘贴板!
属性表达式是属性引用和纯文本字符串的组合,可用于替换配置中属性值。
与变量一样,您可以使用 Quarkus 中的属性表达式来替换配置属性的值,而不是硬编码它。当 java.util.Properties 从应用中的配置源读取属性值时,会解析属性表达式。
这意味着,如果在编译时读取配置属性,则属性表达式也会在编译时解析。如果在运行时覆盖了 configuration 属性,则其值会在运行时解析。
属性表达式可使用多个配置源解析。这意味着,您可以使用在一个配置源中定义的属性值来扩展您在另一个配置源中使用的属性表达式。
如果无法解析表达式中的属性值,并且您没有为表达式设置默认值,则您的应用程序会遇到 NoSuchElementException。
7.1. 属性表达式用法示例 复制链接链接已复制到粘贴板!
在本节中,您可以找到如何在配置 Quarkus 应用程序时如何使用属性表达式来获得更大的灵活性的示例。
替换配置属性的值:
您可以使用属性表达式来避免配置中硬编码属性值。使用
${<property_name>}语法编写引用配置属性的表达式,如下例所示:application.properties
remote.host=quarkus.io callable.url=https://${remote.host}/remote.host=quarkus.io callable.url=https://${remote.host}/Copy to Clipboard Copied! Toggle word wrap Toggle overflow callable.url属性的值解析为https://quarkus.io/。设置特定于特定配置配置文件的属性值:
在以下示例中,
%dev配置配置文件和默认配置配置集被设置为将数据源连接 URL 与不同主机地址搭配使用。根据启动应用程序的配置配置集,您的数据源驱动程序会使用您为配置集设置的数据库 URL:application.properties
%dev.quarkus.datasource.jdbc.url=jdbc:mysql://localhost:3306/mydatabase?useSSL=false quarkus.datasource.jdbc.url=jdbc:mysql://remotehost:3306/mydatabase?useSSL=false
%dev.quarkus.datasource.jdbc.url=jdbc:mysql://localhost:3306/mydatabase?useSSL=false quarkus.datasource.jdbc.url=jdbc:mysql://remotehost:3306/mydatabase?useSSL=falseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以通过为每个配置配置集设置自定义
application.server属性的不同值来实现同样的结果。然后,您可以引用应用程序的数据库连接 URL 中的属性,如下例所示:application.properties
%dev.application.server=localhost application.server=remotehost quarkus.datasource.jdbc.url=jdbc:mysql://${application.server}:3306/mydatabase?useSSL=false%dev.application.server=localhost application.server=remotehost quarkus.datasource.jdbc.url=jdbc:mysql://${application.server}:3306/mydatabase?useSSL=falseCopy to Clipboard Copied! Toggle word wrap Toggle overflow application.server属性根据您在运行应用程序时选择的配置集解析为适当的值。设置属性表达式的默认值:
您可以为属性表达式定义默认值。如果扩展表达式所需的属性值没有从任何配置源解析,则quarkus 使用默认值。您可以使用以下语法设置表达式的默认值:
${<expression>:<default_value>}${<expression>:<default_value>}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在以下示例中,数据源 URL 中的属性表达式使用
mysql.db.server作为application.server属性的默认值:application.properties
quarkus.datasource.jdbc.url=jdbc:mysql://${application.server:mysql.db.server}:3306/mydatabase?useSSL=falsequarkus.datasource.jdbc.url=jdbc:mysql://${application.server:mysql.db.server}:3306/mydatabase?useSSL=falseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 嵌套属性表达式:
您可以通过在另一个属性表达式中嵌套属性表达式来编写属性表达式。当扩展嵌套属性表达式时,内部表达式会首先扩展:
${<outer_property_expression>${<inner_property_expression>}}${<outer_property_expression>${<inner_property_expression>}}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 多个属性表达式:
您可以将两个或多个属性表达式接合在一起,如下所示:
${<first_property>}${<second_property>}${<first_property>}${<second_property>}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将属性表达式与环境变量合并:
您可以使用属性表达式来替换环境变量的值。以下示例中的表达式替换了为
HOST环境变量设置的值,作为application.host属性的值。如果没有设置HOST环境变量,application.host将使用remote.host属性的值作为默认值:application.properties
remote.host=quarkus.io application.host=${HOST:${remote.host}}remote.host=quarkus.io application.host=${HOST:${remote.host}}Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 8 章 使用配置配置集 复制链接链接已复制到粘贴板!
您可以根据您的环境使用不同的配置配置集。配置配置集可让您在同一文件中有多个配置,并使用配置集名称在它们之间进行选择。Red Hat build of Quarkus 有三个配置配置集。另外,您可以创建自己的自定义配置集。
Quarkus 默认配置集:
- Dev: 在开发模式中激活
- 测试 :运行测试时激活
- prod :在没有以开发或测试模式下运行时的默认配置集
先决条件
- 您有一个 Quarkus Maven 项目。
流程
打开 Java 资源文件并添加以下导入声明:
import io.quarkus.runtime.configuration.ProfileManager;
import io.quarkus.runtime.configuration.ProfileManager;Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要显示当前的配置配置集,请添加调用
ProfileManager.getActiveProfile ()方法的日志:LOGGER.infof("The application is starting with profile `%s`", ProfileManager.getActiveProfile());LOGGER.infof("The application is starting with profile `%s`", ProfileManager.getActiveProfile());Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意无法使用
@ConfigProperty ("quarkus.profile")方法访问当前配置文件。
8.1. 设置自定义配置配置集 复制链接链接已复制到粘贴板!
您可以根据需要创建任意数量的配置配置集。您可以在同一个文件中有多个配置,您可以使用配置集名称在它们之间进行选择。
流程
要设置自定义配置集,请在
application.properties文件中使用配置集名称创建一个配置属性,其中 <key> 是属性的名称,<value> 是属性值,<profile> 是配置集的名称:%<profile>.<key>=<value>
%<profile>.<key>=<value>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在以下示例中,
quarkus.http.port的值默认为 9090,当dev配置集被激活时会变为 8181 :quarkus.http.port=9090 %dev.quarkus.http.port=8181
quarkus.http.port=9090 %dev.quarkus.http.port=8181Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下方法之一启用配置集:
设置
quarkus.profile系统属性。要使用
quarkus.profile系统属性启用配置集,请输入以下命令:mvn -Dquarkus.profile=<value> quarkus:dev
mvn -Dquarkus.profile=<value> quarkus:devCopy to Clipboard Copied! Toggle word wrap Toggle overflow
设置
QUARKUS_PROFILE环境变量。要使用环境变量启用配置集,请输入以下命令:
export QUARKUS_PROFILE=<profile>
export QUARKUS_PROFILE=<profile>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意system 属性值优先于环境变量值。
要重新打包应用程序并更改配置集,请输入以下命令:
./mvnw package -Dquarkus.profile=<profile> java -jar target/myapp-runner.jar
./mvnw package -Dquarkus.profile=<profile> java -jar target/myapp-runner.jarCopy to Clipboard Copied! Toggle word wrap Toggle overflow 以下示例显示了激活
prod-aws配置集的命令:./mvnw package -Dquarkus.profile=prod-aws java -jar target/myapp-runner.jar
./mvnw package -Dquarkus.profile=prod-aws java -jar target/myapp-runner.jarCopy to Clipboard Copied! Toggle word wrap Toggle overflow
默认 Quarkus 应用程序运行时配置集设置为用于构建应用程序的配置集。Red Hat build of Quarkus 会自动根据您的环境模式选择一个配置集。例如,当您的应用程序以 JAR 身份运行时,Quarkus 处于 prod 模式。
第 9 章 设置自定义配置源 复制链接链接已复制到粘贴板!
默认情况下,您的 Quarkus 应用从项目的 src/main/resources 子目录中的 application.properties 文件中读取属性。但是,由于 Quarkus 支持 MicroProfile Config,您也可以从其他来源加载应用的配置。您可以通过提供实现 org.eclipse.microprofile.config.spi.ConfigSource 和 org.eclipse.microprofile.config ,为您的配置的值引入自定义配置源。此流程演示了如何在 Quarkus 项目中实施自定义配置源。
.spi.ConfigSource 接口的类
前提条件
-
具有 Quarkus
config-quickstart项目。
流程
在项目中创建
ExampleConfigSourceProvider.java文件并添加以下导入:src/main/java/org/acme/config/ExampleConfigSourceProvider.java
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个实施
org.eclipse.microprofile.config.spi.ConfigSourceProvider接口的类。您必须覆盖其getConfigSources方法,才能返回ConfigSource对象列表:以下示例显示了
ConfigSourceProvider和ConfigSource接口的自定义实现:src/main/java/org/acme/config/ExampleConfigSourceProvider.java
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在项目的
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
org.acme.config.ExampleConfigSourceProviderCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您必须执行此步骤,以确保在编译和启动应用程序时您创建的
ConfigSourceProvider已注册并安装。输入以下命令在开发模式中编译并启动应用程序:
./mvnw quarkus:dev
./mvnw quarkus:devCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在新终端窗口中输入以下命令来验证
/greeting端点是否返回预期信息: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
第 10 章 使用自定义配置转换器作为配置值 复制链接链接已复制到粘贴板!
您可以通过实施 org.eclipse.microprofile.config.spi.Converter<T>,并将它完全限定类名称添加到 META-INF/services/org.eclipse.microprofile.config.spi.Converter 文件中。
先决条件
-
您已创建了 Quarkus
config-quickstart项目。
流程
在您的
META-INF/services/org.eclipse.microprofile.config.spi.Converter服务文件中包含转换器的完全限定类名称,如下例所示:org.acme.config.MicroProfileCustomValueConverter org.acme.config.SomeOtherConverter org.acme.config.YetAnotherConverter
org.acme.config.MicroProfileCustomValueConverter org.acme.config.SomeOtherConverter org.acme.config.YetAnotherConverterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 实现转换器类来覆盖转换方法:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意您的自定义转换器类必须
是公共的,且必须具有公共no-argument 构造器。您的自定义转换器类无法抽象。使用您的自定义类型作为配置值:
@ConfigProperty(name = "configuration.value.name") MicroProfileCustomValue value;
@ConfigProperty(name = "configuration.value.name") MicroProfileCustomValue value;Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.1. 设置自定义转换器优先级 复制链接链接已复制到粘贴板!
所有 Quarkus 内核转换器的默认优先级为 200,所有其他转换器则设为 100。但是,您可以使用 javax.annotation.Priority 注解为您的自定义转换器设置更高的优先级。
以下流程演示了一个自定义转换器 MicroProfileCustomValue 的实施,其优先级为 150,其优先级将优先于 MicroProfileCustomValueConverter,其值为 100。
先决条件
-
您已创建了 Quarkus
config-quickstart项目。
流程
在您的服务文件中添加以下导入语句:
package org.acme.config; import javax.annotation.Priority; import org.eclipse.microprofile.config.spi.Converter;
package org.acme.config; import javax.annotation.Priority; import org.eclipse.microprofile.config.spi.Converter;Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过为自定义转换器添加带有
@Priority注解的类并传递优先级值,为您的自定义转换器设置优先级:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果添加新的转换器,您必须在
META-INF/services/org.eclipse.microprofile.config.spi.Converter服务文件中列出它。
第 11 章 添加 YAML 配置支持 复制链接链接已复制到粘贴板!
红帽构建的 Quarkus 通过 Eclipse MicroProfile 配置的 SmallRye Config 实现支持 YAML 配置文件。您可以添加 Quarkus Config YAML 扩展,并使用 YAML over 属性进行配置。Quarkus 支持使用 application.yml 以及 application.yaml 作为 YAML 文件的名称。
YAML 配置文件优先于 application.properties 文件。推荐的方法是删除 application.properties 文件,仅使用一种配置文件来避免错误。
流程
使用以下方法之一在项目中添加 YAML 扩展:
打开
pom.xml文件,并将quarkus-config-yaml扩展添加为依赖项:<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-config-yaml</artifactId> </dependency><dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-config-yaml</artifactId> </dependency>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要从命令行添加
quarkus-config-yaml扩展,请在项目目录中输入以下命令:./mvnw quarkus:add-extension -Dextensions="quarkus-config-yaml"
./mvnw quarkus:add-extension -Dextensions="quarkus-config-yaml"Copy to Clipboard Copied! Toggle word wrap Toggle overflow
11.1. 使用带有 YAML 的嵌套对象配置 复制链接链接已复制到粘贴板!
您可以在已经存在的类中定义嵌套类。此流程演示了如何使用 YAML 格式的配置文件为 Quarkus 应用程序设置嵌套配置属性。
先决条件
- 具有 Quarkus Maven 项目。
- 具有 PostgreSQL 数据源。
在项目的
pom.xml文件中有以下扩展作为依赖项:-
quarkus-rest-client, -
quarkus-jdbc-postgresql -
quarkus-config-yaml
-
流程
-
打开
src/main/resources/application.yaml配置文件。 在
application.yaml文件中添加嵌套类配置属性,如下例所示:src/main/resources/application.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,您可以使用注释来描述配置属性,其方式与在
application.properties中使用它们类似。注意始终使用空格在 YAML 配置文件中缩进属性。YAML 不允许使用标签页来缩进。
11.2. 使用 YAML 设置自定义配置配置集 复制链接链接已复制到粘贴板!
通过 Quarkus,您可以设置特定于应用程序的不同配置配置集的配置属性和值。您可以使用特定配置集启动应用程序来访问特定的配置。此流程演示了如何以 YAML 格式为特定配置集提供配置。
先决条件
- 具有 Quarkus Maven 项目,它将配置为使用带有 JDBC 数据源驱动程序的 PostgreSQL 数据源。
-
具有
quarkus-jdbc-postgresql和quarkus-config-yaml扩展,作为项目的pom.xml文件中的依赖项。
流程
-
打开
src/main/resources/application.yaml配置文件。 要设置配置集依赖的配置,请在使用
"%<profile_name>" 语法定义键值对前添加配置集名称。确保将配置集名称放在引号内。在 YAML 中,以特殊字符开头的所有字符串都必须放在引号内。在以下示例中,当您以开发模式启动 Quarkus 应用程序时,PostgreSQL 数据库被配置为位于
jdbc:postgresql://localhost:5432/some-databaseURL 中:src/main/resources/application.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
11.3. 管理配置密钥冲突 复制链接链接已复制到粘贴板!
YAML 等结构化格式只支持可能配置命名空间的子集。以下流程演示了两个配置属性 quarkus.http.cors 和 之间的冲突的解决方案,其中一个属性是另一个属性的前缀。
quarkus.http.cors.methods
先决条件
- 您已将 Quarkus 项目配置为读取 YAML 配置文件。
流程
- 打开 YAML 配置文件。
要将 YAML 属性定义为另一个属性的前缀,请在属性范围内添加一个 kiosk (
~),如下例所示:quarkus: http: cors: ~: true methods: GET,PUT,POSTquarkus: http: cors: ~: true methods: GET,PUT,POSTCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要将 Quarkus 应用程序编译为开发模式,请从项目目录输入以下命令:
./mvnw quarkus:dev
./mvnw quarkus:devCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意您可以使用 YAML 密钥在任何级别上冲突配置密钥,因为它们没有包含在配置属性名称的汇编中。
第 12 章 更新功能测试以验证配置更改 复制链接链接已复制到粘贴板!
在测试应用程序的功能前,您必须更新功能测试,以反映您对应用程序的端点所做的更改。以下流程演示了如何在 Quarkus config-quickstart 项目中更新 testHelloEndpoint 方法。
流程
-
打开
GreetingResourceTest.java文件。 更新
testHelloEndpoint方法的内容:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 13 章 打包并运行 Quarkus 应用程序 复制链接链接已复制到粘贴板!
编译 Quarkus 项目后,您可以将其打包到 JAR 文件中,并从命令行运行。
先决条件
- 您已编译了 Quarkus 项目。
流程
要打包 Quarkus 项目,请
在根目录中输入以下命令:./mvnw clean package
./mvnw clean packageCopy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令在
/target目录中生成以下 JAR 文件:-
config-quickstart-1.0-SNAPSHOT.jar:包含项目的类和资源。这是 Maven 构建生成的常规工件。 -
config-quickstart-1.0-SNAPSHOT-runner.jar: Is a executable JAR file.请注意,这个文件不是 uber-JAR 文件,因为依赖项被复制到目标/lib目录中。
-
- 如果开发模式正在运行,请按 CTRL+C 停止开发模式。如果没有这样做,则会出现端口冲突。
要运行应用程序,请输入以下命令:
java -jar target/config-quickstart-1.0-SNAPSHOT-runner.jar
java -jar target/config-quickstart-1.0-SNAPSHOT-runner.jarCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意来自
runnerJAR 文件中的MANIFEST.MF文件的Class-Path条目明确列出了lib目录中的 JAR 文件。如果要从其他位置部署应用程序,您必须复制运行程序JAR 文件和lib目录。