重新增强 Quarkus 应用程序
什么是增强?
Quarkus 应用程序配置可能包含两种类型的配置选项
-
构建时选项,在应用程序构建期间处理;
-
运行时选项,可以在应用程序构建后但在启动之前进行调整。
增强是应用程序构建过程中的一个阶段,在此阶段,应用程序的字节码根据应用程序构建时配置进行优化。过去在 Jakarta EE 服务器上部署 EAR 文件时发生的初始化步骤(例如解析静态配置、创建代理实例等)现在发生在增强时。增强后添加的 CDI Bean 将无法工作(由于缺少代理类),并且在增强后更改的构建时属性(例如 quarkus.datasource.db-kind
)将被忽略。构建时属性在所有配置选项列表中用锁图标 () 标记。无论您使用配置文件还是任何其他方式来覆盖属性,都无关紧要。
重新增强是为不同的构建时配置重新创建增强输出的过程
何时重新增强有用?
如果您的应用程序的用户希望能够更改其某些构建时属性,则重新增强很有用。例如,更改数据库驱动程序或打开或关闭功能(例如,OpenTelemetry 或 Config 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 的配置。请不要在构建工具配置文件中包含敏感信息。 |
2. 使用不同的构建时配置重新增强您的应用程序
为了使用不同的构建时属性重新增强您的 Quarkus 应用程序,请使用所需的配置加上设置为 true
的 quarkus.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 将在应用程序重新增强后立即退出。 |