编辑此页面

重新增强 Quarkus 应用程序

什么是增强?

Quarkus 应用程序配置可能包含两种类型的配置选项

  • 构建时选项,在应用程序构建期间处理;

  • 运行时选项,可以在应用程序构建后但在启动之前进行调整。

增强是应用程序构建过程中的一个阶段,在此阶段,应用程序的字节码根据应用程序构建时配置进行优化。过去在 Jakarta EE 服务器上部署 EAR 文件时发生的初始化步骤(例如解析静态配置、创建代理实例等)现在发生在增强时。增强后添加的 CDI Bean 将无法工作(由于缺少代理类),并且在增强后更改的构建时属性(例如 quarkus.datasource.db-kind)将被忽略。构建时属性在所有配置选项列表中用锁图标 () 标记。无论您使用配置文件还是任何其他方式来覆盖属性,都无关紧要。

重新增强是为不同的构建时配置重新创建增强输出的过程

何时重新增强有用?

如果您的应用程序的用户希望能够更改其某些构建时属性,则重新增强很有用。例如,更改数据库驱动程序或打开或关闭功能(例如,OpenTelemetryConfig Consul)。如果只有两三个构建时属性依赖于用户环境,您可以考虑提供应用程序的替代版本。但是,如果存在更多此类属性,您可能更喜欢发布一个可变 jar,并让您的用户针对他们的环境重新增强应用程序。请注意,您将无法将 mutable-jar 包类型用于本机镜像。考虑一下后果以及您还有哪些其他选择!

除非您怀念启动服务器需要几分钟,并且您可以享受一杯咖啡直到准备就绪的美好旧时光,否则在运行时进行重新增强并不是一个好主意。

如何重新增强 Quarkus 应用程序

为了运行增强步骤,您需要使用的 Quarkus 扩展的部署 JAR。这些 JAR 仅存在于 mutable-jar 分发中。这意味着您需要使用 quarkus.package.jar.type=mutable-jar 构建您的应用程序。mutable-jar 分发与 fast-jar 分发相同,只是多了一个额外的文件夹 quarkus-app/lib/deployment,其中包含部署 JAR 及其依赖项(以及一些类加载器配置)。

默认情况下,如果在运行时更改了构建时属性,您将收到警告。您可以设置 quarkus.config.build-time-mismatch-at-runtime=fail 属性以确保如果存在不匹配,您的应用程序不会启动。但是,在撰写本文时,在运行时更改 quarkus.datasource.db-kind 既没有失败也没有产生警告,而是被默默地忽略了。
构建工具(Maven pom.xml 中的 properties 或 Gradle 中的 gradle.properties)在 quarkus 命名空间中提供的构建时配置将成为 mutable-jar 分发的一部分,包括引用机密或密码的来自 quarkus 的配置。请不要在构建工具配置文件中包含敏感信息。

1. 将您的应用程序构建为 mutable-jar

mvn clean install -Dquarkus.package.jar.type=mutable-jar

2. 使用不同的构建时配置重新增强您的应用程序

为了使用不同的构建时属性重新增强您的 Quarkus 应用程序,请使用所需的配置加上设置为 truequarkus.launch.rebuild 系统属性启动应用程序。

以下示例将 quarkus.datasource.db-kind 更改为 mysql。为此,必须在构建中包含 mysql-extension。增强只能使用编译期间存在的扩展。

java -jar -Dquarkus.launch.rebuild=true -Dquarkus.datasource.db-kind=mysql target/quarkus-app/quarkus-run.jar
使用系统属性、环境变量、配置文件或外部配置文件都没有关系。当前配置将用于增强(quarkus-app/quarkus 的内容将被新的增强输出替换)。上面的命令行不会启动应用程序。Quarkus 将在应用程序重新增强后立即退出。

3. 可选:删除 deployments 文件夹

您可以删除目录 quarkus-app/lib/deployment 以节省 ZIP 分发或 Docker 镜像中的一些空间(请记住使用多阶段 Docker 构建以避免不必要的层)。删除 deployment 目录后,显然不再可能重新增强应用程序。

相关内容