1.4. 影响与早期版本兼容的更改
本节论述了红帽构建的 Quarkus 3.20 中的更改,它们会影响使用早期产品版本构建的应用程序的兼容性。
查看这些有问题的更改,并采取必要的步骤来确保应用程序在将其更新至红帽构建的 Quarkus 3.20 后继续正常工作。
您可以通过运行 quarkus update
或等同的 Maven 命令来执行本节中列出的许多更新。这会触发将项目依赖项和源代码更新至最新红帽构建的 Quarkus 版本的自动化 OpenRewrite 方法。
但是,并非所有迁移任务都是自动化的。如果自动更新没有应用特定的更新,这可能是因为可用的 OpenRewrite 方法未涵盖所需的迁移任务,或者您的项目依赖的扩展与最新版本不兼容。在这种情况下,您需要手动执行更新。务必查看以下项目以识别和解决任何手动迁移任务。
1.4.1. 云 复制链接链接已复制到粘贴板!
在红帽构建的 Quarkus 3.20 中,以下扩展将 Fabric8 Kubernetes 客户端从版本 6.13 升级到 7.1。
-
quarkus-openshift
-
quarkus-openshift-client
-
quarkus-kubernetes
-
quarkus-kubernetes-client
可能会造成问题的更改
升级的 Fabric8 Kubernetes 客户端包括破坏影响 quarkus-kubernetes-client
和 quarkus-openshift-client
扩展的更改。
虽然 quarkus-openshift
和 quarkus-kubernetes
扩展使用 Fabric8,但它们的功能保持不变,因此您不需要为它们进行任何更新。
作为升级的一部分,io.quarkus:quarkus-test-openshift-client
模块已被删除。如果您的测试使用此模块,请迁移到 io.quarkus:quarkus-test-kubernetes-client
,它提供等同的功能。如需更多信息,请参阅 Quarkus "Kubernetes Client" 指南中的 OpenShift 客户端 部分。
升级的 Fabric8 Kubernetes 客户端重新组织了一些模型类型和类,将部分模式移到不同的模块。要找到它们的新位置,请参阅官方 Fabric8 Kubernetes 客户端:从 6.x 迁移到 7.x 指南。
检查您的应用程序是否有任何受影响的依赖项、配置或 API 使用情况,并根据需要更新它们。然后,对应用程序进行全面的测试,以确保与 Fabric8 7.1 完全兼容。
Red Hat build of Quarkus 3.20 为 quarkus-kubernetes
扩展提供了开发者预览支持,目前不支持 quarkus-kubernetes-client
扩展。但是,如果您使用这些扩展,则上述更改可能会影响您的迁移。
这个更改需要手动干预。它不包括在 将应用程序迁移到红帽构建的 Quarkus 3.20 指南中的自动更新过程中。
1.4.2. 兼容性 复制链接链接已复制到粘贴板!
1.4.2.1. 删除 Reactive 重命名兼容性层 复制链接链接已复制到粘贴板!
在红帽构建的 Quarkus 3.15 中,许多扩展和配置属性被重命名为 RESTEasy Reactive 到 Quarkus REST 和 Reactive Messaging to Quarkus Messaging 的一部分。为了支持这个转换,引入了工件重新定位和配置回退。
在 Red Hat build of Quarkus 3.20 中,这些工件重新定位和配置回退已被删除。现在,您必须使用新的工件名称和配置属性。
如需了解更多背景信息,请参阅 "Release Notes for Red Hat build of Quarkus 3.15" 指南中的 RESTEasy Reactive 扩展重命名为 Quarkus REST 部分。
1.4.3. Core 复制链接链接已复制到粘贴板!
1.4.3.1. 改进了默认区域设置配置 复制链接链接已复制到粘贴板!
红帽构建的 Quarkus 3.20 更新区域设置处理,使其与 Mandrel 版本 24.2 及更新版本保持一致。
可能会造成问题的更改
在早期版本中,应用程序会继承构建系统的默认区域设置。
为确保所有应用程序的一致性区域设置行为,红帽构建的 Quarkus 应用了标准化的默认区域设置策略。使用下表来确定应用程序的行为根据您的区域设置变化。
应用程序属性 | 原生可执行文件中包含的区域设置 | 运行时的默认区域设置 |
---|---|---|
没有设置 |
|
|
仅设置 |
|
|
仅设置 |
|
|
|
|
|
en_US
区域总是嵌入到原生可执行文件中,无论 quarkus.locales
配置是什么。
如果您设置了 quarkus.default-locale
,红帽构建的 Quarkus 会在运行时设置 user.language
和 user.country
系统属性。对于 JDK 24 及之后的版本使用 GraalVM 或 Mandrel,您也可以直接覆盖这些属性。
检查应用程序在配置属性中的区域设置,如有必要,更新设置以避免行为的意外更改。
这个更改需要手动干预。它不包括在 将应用程序迁移到红帽构建的 Quarkus 3.20 指南中的自动更新过程中。
在红帽构建的 Quarkus 3.20 中,@Fallback.fallbackMethod ()
和 @BeforeRetry.methodName ()
的配置属性现在在构建时被解决,且无法在运行时更改。受影响的配置属性有:
-
<class_name>/<method_name>/Fallback/fallbackMethod
-
<class_name>/Fallback/fallbackMethod
-
fallback/fallbackMethod
-
<class_name>/<method_name>/BeforeRetry/methodName
-
<class_name>/BeforeRetry/methodName
-
BeforeRetry/methodName
此更改可确保正确反映配置和与原生镜像编译的兼容性。
1.4.3.3. smallrye Fault Tolerance 版本 6.7.0 弃用了第一代程序 API 复制链接链接已复制到粘贴板!
在 Red Hat build of Quarkus 3.20 中,quarkus-smallrye-fault-tolerance
扩展包括 SmallRye Fault Tolerance 6.7.0,它没有破坏更改,但包括以下更新:
-
Programmatic API 的第一个版本(
FaultTolerance
,@ApplyFaultTolerance
)已弃用,计划在 SmallRye Fault Tolerance 7.0 中删除。第二个版本(Guard
、TypedGuard
、@ApplyGuard
)充当替换,但存在显著区别。 - 规范定义的配置属性仍然可用,但红帽构建的 Quarkus 现在提供您可以改为使用的原生配置属性。
如需更多信息,请参阅 SmallRye Fault Tolerance 6.7.0 发行公告,其中包括到 programmatic API 迁移指南的链接,以及新配置属性的详情。Quarkus SmallRye Fault Tolerance 指南为这些配置属性提供了完整的参考。
1.4.3.4. 调度程序方法现在需要启动调度程序 复制链接链接已复制到粘贴板!
从红帽构建的 Quarkus 3.20 开始,io.quarkus.scheduler.Scheduler
中的方法行为已更改。
当调度程序没有启动时,几乎所有方法现在都会抛出 UnsupportedOperationException
。
要验证调度程序是否正在运行,您可以使用新方法 Scheduler#isStarted ()
。
这个更改会影响来自 quarkus-scheduler
和 quarkus-quartz
扩展的调度程序实例。
1.4.3.5. 管理界面现在侦听 localhost in development 和 test 模式 复制链接链接已复制到粘贴板!
从红帽构建的 Quarkus 3.20 开始,当您使用 development 和 test 模式时,管理界面默认侦听 localhost 接口,而不是 0.0.0.0
。这个变化与主接口的行为一致。
在 Windows 上,适用于 Linux (WSL)的 Windows 子系统,管理和主接口将继续侦听 0.0.0.0
。
如需更多信息,请参阅 Quarkus 管理界面参考指南。
1.4.3.6. 迁移到 @ConfigMapping 和弃用配置类 复制链接链接已复制到粘贴板!
在红帽构建的 Quarkus 3.20 中,配置已迁移到 @ConfigMapping
框架。这个更改弃用了旧的配置类,而是基于接口和方法签名的统一配置模型。
对于某些常用的配置类,兼容性层仍存在,但计划在以后的发行版本中删除。
1.4.3.7. 构建器和运行时基础镜像升级到 UBI 9 复制链接链接已复制到粘贴板!
从红帽构建的 Quarkus 3.20 开始,红帽构建器和运行时基础镜像已升级到使用 Red Hat Universal Base Image 9 (UBI 9)。
当从 UBI 8 升级到 UBI 9 时,请注意,系统依赖项、原生镜像构建或软件包和 GNU C 库(glibc)版本更新可能会影响应用程序的行为或运行时环境。根据需要检查和更新您的配置。
如果 UBI 9 时遇到问题,您可以手动切换到使用 UBI 8:
镜像 | Actions |
---|---|
构建器镜像 | 手动设置构建器镜像,如下所示:
|
运行时镜像 | 根据模式,应用以下设置:
|
如需更多信息,请参阅以下资源:
1.4.4. data 复制链接链接已复制到粘贴板!
在早期版本的 Red Hat build of Quarkus 中,当 Dev Services 被禁用或以 production 模式运行时,quarkus.datasource.reactive.url
和 quarkus.datasource.<datasource-name>.reactive.url
属性被隐式设置为未记录的默认,以带有数据库特定端口的 localhost
为目标。
从红帽构建的 Quarkus 3.20 开始,这些属性在禁用 Dev Services 时不再具有默认值,或者应用程序以 production 模式运行。如果没有设置属性,则会取消激活对应的数据源。如果应用程序尝试使用已停用的数据源,它将在启动时失败。详情请查看 Datasource usage failed if data is deactivated 或 no URL set release note。
如果您的应用程序需要活跃的数据源,并且希望它连接到 localhost
上的数据库,则必须明确设置 quarkus.datasource.reactive.url
或 quarkus.datasource.<datasource-name>.reactive.url
属性。例如:
quarkus.datasource.reactive.url=postgresql://localhost:5432/mydatabase
quarkus.datasource.reactive.url=postgresql://localhost:5432/mydatabase
在早期版本中,此配置被隐式设置。从这个版本开始,您必须定义用于激活数据源的 URL。
1.4.4.2. 没有 URL 的数据源不再有助于进行健康检查 复制链接链接已复制到粘贴板!
在以前的版本中,当 Dev Services 被禁用或生产模式中,红帽构建的 Quarkus 也会为数据源提供健康检查,即使 quarkus.datasource.jdbc.url
, quarkus.datasource.<datasource.<datasource-name>.jdbc.url
,quarkus.datasource.reactive.url
, 或 quarkus.datasource.<datasource-name>.reactive.url
属性没有设置。这会导致对 JDBC 数据源成功进行不可靠的健康检查,对于被动数据源,几乎始终失败。
从红帽构建的 Quarkus 3.20 开始,没有 URL 的数据源不再贡献健康检查。为确保健康检查可用,请明确设置 quarkus.datasource.jdbc.url
, quarkus.datasource.<datasource-name>.jdbc.url ,
, 或 quarkus.
datasource.reactive.urlquarkus.datasource.<datasource.<datasource.<reactive.url
属性。
1.4.4.3. 如果数据源被取消激活或没有设置 URL,则数据源使用量很快 复制链接链接已复制到粘贴板!
在 Red Hat build of Quarkus 3.20 中,即使数据源使用 quarkus.datasource.active=false
取消激活或缺少 URL,应用程序也会成功启动。当数据源首次访问时,通常会造成运行时失败,特别是在 Dev 服务被禁用或生产模式中时。
在这个版本中,如果红帽构建的 Quarkus 检测到使用了数据源,但会被取消激活或缺少 URL,则应用程序无法启动。
红帽构建的 Quarkus 现在在启动时强制执行更严格的验证,以便在早期捕获这些问题:
-
静态 CDI 注入 :如果数据源使用
@Inject DataSource
或@Inject Pool
进行静态注入,则应用将无法启动并带有清晰、可操作的错误消息。 -
Dynamic Retrieval: Datasources 动态检索,如使用
Arc.container ().instance ()
或@Inject Instance<DataSource
>,在启动过程中不会检测到。但是,在运行时检索这些 Bean 会抛出一个明确的异常,但有可操作指导。
相同的验证适用于其 Flyway 和 Liquibase 的扩展,用于其 Flyway
和 LiquibaseFactory
CDI Bean。
红帽构建的 Quarkus 3.20 目前不支持 Flyway 和 Liquibase 扩展。但是,如果您使用这些扩展,则上述更改可能会影响您的迁移。
对应用程序的影响
如果您的应用程序使用数据源、Flyway 或 LiquibaseFactory bean,它可能会停用或缺少 URL,您可能会遇到如下启动失败:
io.quarkus.arc.InactiveBeanException: Bean is not active: SYNTHETIC bean [class=io.agroal.api.AgroalDataSource, id=sqqLi56D50iCdXmOjyjPSAxbLu0] Reason: Datasource' <default>' was deactivated automatically because its URL was not set.
io.quarkus.arc.InactiveBeanException: Bean is not active: SYNTHETIC bean [class=io.agroal.api.AgroalDataSource, id=sqqLi56D50iCdXmOjyjPSAxbLu0] Reason: Datasource' <default>' was deactivated automatically because its URL was not set.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 若要激活数据源,可设置配置属性
quarkus.datasource.jdbc.url
。如需更多信息,请参阅 配置数据源指南。
如果数据源应处于活动状态,如何解决
确保设置了所有所需的配置属性:
-
设置
quarkus.datasource.jdbc.url
或数据源类型的适当配置,以确保其已正确激活。
如果数据源可能不活跃,如何解决
调整您的代码或配置以安全地处理不活跃数据源:
停用未使用的扩展:如果扩展依赖于可能未激活的数据源,请通过将其
活跃
配置属性设置为false
来明确取消激活扩展。例如:-
quarkus.hibernate-search-standalone.active=false
-
quarkus.hibernate-search-orm.active=false
-
quarkus.hibernate-orm.active=false
-
quarkus.flyway.active=false
-
quarkus.datasource.active=false
-
注入动态:使用静态 CDI 注入时,请使用
@Inject InjectableInstance<DataSource
> 检查数据源 Bean 在使用它之前是否活跃。if (ds.getHandle().getBean().isActive()) { DataSource dataSource = ds.get(); // Use the datasource }
if (ds.getHandle().getBean().isActive()) { DataSource dataSource = ds.get(); // Use the datasource }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这些更改通过早期检测错误配置的数据源来提高应用程序可靠性,从而防止意外的运行时错误。
1.4.4.4. Flyway 版本 11 删除 cleanOnValidationError 复制链接链接已复制到粘贴板!
在 Red Hat build of Quarkus 3.20 中,quarkus-flyway
扩展将 Flyway 升级到版本 11,这会删除 cleanOnValidationError
配置参数。另外,调用 Flyway.validate ()
不再在验证错误时清除。
为了缓解这个变化,红帽构建的 Quarkus 3.20 引入了 quarkus.flyway.validate-at-start.clean-on-validation-error
配置属性,它提供与 cleanOnValidationError
类似的行为,但仅在应用程序启动时应用。
临时解决方案:如果您在明确调用 Flyway.validate ()
中需要之前 清理Error
的行为,请考虑捕获应用程序中验证错误,并使用 Flyway.clean ()
显式触发数据库清理。
红帽构建的 Quarkus 3.20 目前不支持 Flyway 扩展。但是,如果您使用此扩展,则上述更改可能会影响您的迁移。
这个更改需要手动干预。它不包括在 将应用程序迁移到红帽构建的 Quarkus 3.20 指南中的自动更新过程中。
如需更多信息,请参阅使用 Flyway 指南 的 Quarkus。
1.4.4.5. IBM Db2 驱动程序和容器镜像升级到版本 12 复制链接链接已复制到粘贴板!
在 Red Hat build of Quarkus 3.20 中,Dev Services 使用的 IBM Db2 驱动程序和容器镜像已升级到 12 版本。
迁移应用程序到红帽构建的 Quarkus 3.20 指南中描述的自动更新将 IBM Db2 驱动程序和容器镜像升级到 12 版本。
可能会造成问题的更改
此升级引入了破坏许可证注册过程和连接配置的更改。
查看 在升级到 Db2 Connect 12.1 驱动程序时有关 IBM 功能更改 的新许可证要求、配置步骤和 SSL/TLS 设置,以升级到 Db2 Connect 12.1。
这个更改需要手动干预。它不包括在 将应用程序迁移到红帽构建的 Quarkus 3.20 指南中的自动更新过程中。
1.4.4.6. Hibernate ORM Bean 验证默认对 DDL 贡献 复制链接链接已复制到粘贴板!
在红帽构建的 Quarkus 3.20 中,Hibernate ORM 的 Bean Validation 集成的默认行为发生了变化。在以前的版本中,在数据定义语言(DDL)生成过程中不会考虑验证约束。在这个版本中,Hibernate ORM 默认在 DDL 中包括适用的验证限制,确保数据库模式与应用程序级别约束更加一致。
要恢复到验证约束不会影响 DDL 生成的行为,请将
quarkus.hibernate-orm.validation.mode
配置属性设置为callback
:quarkus.hibernate-orm.validation.mode=callback
quarkus.hibernate-orm.validation.mode=callback
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
quarkus.hibernate-orm.validation.enabled
属性也已弃用。
要禁用 Bean Validation 集成,请使用以下设置:
quarkus.hibernate-orm.validation.mode=none
quarkus.hibernate-orm.validation.mode=none
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
有关迁移应用程序的这些更改和指南的更多信息,请参阅 迁移指南 3.19 或以下资源:
1.4.5. 日志记录 复制链接链接已复制到粘贴板!
1.4.5.1. quarkus.log commands.json 属性已弃用 复制链接链接已复制到粘贴板!
在 Red Hat build of Quarkus 3.20 中,quarkus.log aws.json
配置属性已弃用。要为日志记录启用 JSON 格式,请使用 quarkus.log aws.json.enabled
属性。
按如下方式更新您的配置:
quarkus.log.console.json.enabled=true
quarkus.log.console.json.enabled=true
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
引进了这个更改来提高与 YAML 配置的兼容性,以前的结构需要使用特殊语法(如 ~
)为 root 键分配值,从而导致混淆或容易出错的设置。
如需更多信息,请参阅 迁移指南 3.19。
1.4.6. Observability(可观察性) 复制链接链接已复制到粘贴板!
1.4.6.1. OpenTelemetry: Database incubating values moved 复制链接链接已复制到粘贴板!
在 Red Hat build of Quarkus 3.20 中,quarkus-opentelemetry
扩展引入了破坏更改,因为一些数据库出现的问题(如与 Redis 相关的值)被移到不同的软件包中。
OpenTelemetry 不维护数据库语义惯例的更改列表,因为它们尚不稳定。
如果您使用手动工具,可能需要手动干预。它不包括在 将应用程序迁移到红帽构建的 Quarkus 3.20 指南中的自动更新过程中。
1.4.6.2. smallrye OpenTracing:删除扩展和相关 JDBC 追踪配置 复制链接链接已复制到粘贴板!
在 Red Hat build of Quarkus 3.20 中,之前弃用的 quarkus-smallrye-opentracing
扩展和相关配置属性 quarkus.datasource.jdbc.tracing
已被删除。
quarkus-opentelemetry
扩展现在是首选的追踪解决方案。要使用 OpenTelemetry 启用 JDBC 追踪,请使用以下配置属性:
quarkus.datasource.jdbc.telemetry=true
quarkus.datasource.jdbc.telemetry=true
要迁移,请将 OpenTracing 扩展替换为 OpenTelemetry,并相应地更新您的配置。
1.4.7. 安全性 复制链接链接已复制到粘贴板!
1.4.7.1. OIDC Client:如果客户端没有 URL,则行为改变 复制链接链接已复制到粘贴板!
从 Red Hat build of Quarkus 3.20 开始,如果您使用 quarkus-oidc-client
扩展,但没有将 OpenID Connect (OIDC)客户端配置为指向特定 URL,则 Keycloak 的 Dev Services 会自动以 dev 模式启动。
要禁用此行为,请在 application.properties
文件中添加以下属性:
quarkus.keycloak.devservices.enabled=false
quarkus.keycloak.devservices.enabled=false
1.4.7.2. 安全 WebAuthn: 使用 WebAuthn4J 重新实施 复制链接链接已复制到粘贴板!
在 Red Hat build of Quarkus 3.20 中,使用 WebAuthn4J 重新实施 quarkus-security-webauthn
扩展来增强安全性、与行业标准一致,并改进长期可维护性。
因此,这个更新与之前的扩展版本不兼容。
此发行注记是为 quarkus-security-webauthn
扩展的用户提供的。虽然红帽构建的 Quarkus 3.20 尚不支持此扩展,但请注意,这个更改可能会影响您的迁移。
要平稳过渡到新实施,请使用以下信息:
用户名
更改
-
所有
userName
引用都已使用用户名
替换。
身份验证器
类更改
Authenticator
类(来自 Vert.x)不再被使用,且功能被WebAuthnCredentialRecord
替代。这个新类包含类似的数据,但作为 WebAuthn4J 子类型,需要不同的方法来访问内容:-
WebAuthnCredentialRecord.getRequiredPersistedData ()
返回带有所有必要的持久性数据的RequiredPersistedData
记录,简化存储管理。 -
WebAuthnCredentialRecord.fromRequiredPersistedData (RequiredPersistedData)
,它是一个静态方法,从存储的数据重新创建WebAuthnCredentialRecord
。
-
-
如果您的应用程序将
Authenticator
数据存储在 JPA 实体或数据库表中,则必须迁移到新的WebAuthnCredentialRecord
格式。如果您遇到问题,请在项目存储库中报告它们。
WebAuthnUserProvider
类更改
-
findWebAuthnCredentialsByUserName ()
现在是findByUsername ()
。 -
findWebAuthnCredentialsByCredID()
is nowfindByCredentialId()
. updateOrStoreWebAuthnCredentials ()
已分成以下内容:-
update (String credentialId, long counter)
-
store (WebAuthnCredentialRecord credentialRecord)
-
默认端点更改
-
/Q/webauthn/login
现在为/q/webauthn/login-options-challenge
。 -
/Q/webauthn/register
现在为/q/webauthn/register-options-challenge
。 /Q/webauthn/callback
已分成以下端点,出于安全原因默认关闭:/q/webauthn/login
要启用,请设置
quarkus.webauthn.enable-login-endpoint
属性。/q/webauthn/register
要启用,请设置
quarkus.webauthn.enable-registration-endpoint
属性。
-
新的
/q/webauthn/register
端点需要用户名
查询参数。 -
添加了
/.well-known/webauthn
,以返回允许相关源的列表。 -
login
和login-options-challenge
的用户名现在是可选的。 -
/q/webauthn/login-options-challenge
和/q/webauthn/register
端点已从POST
移到GET
方法,现在接受参数作为查询参数而不是 JSON bodies。
WebAuthnSecurity
类更改
添加了两种方法:
-
getLoginOptionsChallenge()
-
getRegisterOptionsChallenge()
-
-
login ()
和loginOptionsChallenge ()
的用户名
参数现在是可选的。 -
register ()
方法现在需要一个username
参数,因为删除了用户名 cookie。
配置更改
-
quarkus.webauthn.require-resident-key
(boolean, default:false
)已被quarkus.webauthn.resident-key
(数据枚举,默认为REQUIRED
)。 -
quarkus.webauthn.challenge-username-cookie-name
设置与其关联的 Cookie 一起被删除。 添加了以下新配置设置:
-
quarkus.webauthn.load-metadata
(布尔值:default:false
)控制 Fast Identity Online (FIDO)元数据的加载。 -
quarkus.webauthn.user-presence-required
(布尔值,默认值:true
)指定是否需要用户存在。
-
-
quarkus.webauthn.user-verification
现在默认为REQUIRED
而不是DISCOURAGED
。 -
quarkus.webauthn.timeout
现在默认为5 分钟
,而不是1 分钟
(根据 WebAuthn 标准)。 -
quarkus.webauthn.pub-key-cred-params
现在为quarkus.webauthn.public-key-credential-parameters
。 -
quarkus.webauthn.origin
现在是quarkus.webauthn.origins
(复数),现在根据 WebAuthn 标准支持多个原始卷。 添加了以下新布尔值配置选项:
-
quarkus.webauthn.enable-registration-endpoint
(boolean, default:false
)启用默认注册端点。 -
quarkus.webauthn.enable-login-endpoint
(boolean, default:false
)启用默认登录端点。
-
webauthn 凭证验证更改
-
在测试验证时 webauthn 凭证的行为可能与
NONE
以外的quarkus.security.webauthn.attestation
设置不同。
quarkus-test-security-webauthn
test 模块更改
-
WebAuthnHardware
constructor 现在需要一个URL
参数来代表端点位置。您可以使用@TestHTTPResource URL url
从测试类获取此 URL。 -
WebAuthnEndpointHelper.invokeRegistration()
is nowobtainRegistrationChallenge()
. -
WebAuthnEndpointHelper.invokeLogin ()
现在是getLoginChallenge ()
,并接受可选的username
参数。 WebAuthnEndpointHelper.invokeCallback ()
已分成以下内容:-
WebAuthnEndpointHelper.invokeRegistration ()
,它需要一个username
参数。 -
WebAuthnEndpointHelper.invokeLogin ()
,它接受可选的username
参数。
-
JavaScript 库更改
-
registerOnly ()
现在是registerClientSteps ()
。 -
loginOnly ()
现在是loginClientSteps ()
。 -
login ()
和loginClientSteps ()
现在接受可选的user
参数。 -
constructor 参数
registerPath
现在是registerOptionsChallengePath
(默认为/q/webauthn/register-options-challenge
)。 -
constructor 参数
loginPath
现在是loginOptionsChallengePath
(默认为/q/webauthn/login-options-challenge
)。 constructor 参数
callbackPath
已分成以下内容:-
registerPath
(默认为/q/webauthn/register
) -
loginPath
(默认为/q/webauthn/login
)
-
构造器现在接受类型为
JsonObject
的csrf
选项,它有两个键:-
标头
,用于指定用于包含 Cross-Site Request Forgery Prevention (CSRF)令牌的标头名称。 值
,它指定 CSRF 令牌值。这个版本提高了由
quarkus-rest-csrf
扩展保护的自定义端点的安全性。如需更多信息,请参阅 Quarkus cross -Site Request Forgery Prevention 指南。
-
此功能的状态从 preview
降级为 实验性
,以允许进一步稳定。
如需更多信息,请参阅 Using Security with WebAuthn 指南。
这个更改需要手动干预。它不包括在 将应用程序迁移到红帽构建的 Quarkus 3.20 指南中的自动更新过程中。
1.4.8. 工具 复制链接链接已复制到粘贴板!
在以前的版本中,红帽构建的 Quarkus 3.15 版本附带 @WithTestResource
版本被缺陷,因此没有宣布。
在 Red Hat build of Quarkus 3.20 中,这个问题已解决。在本发行版本中,早期 restrictToAnnotatedClass
字段已被 scope
替代。
1.4.8.2. JUnit 5 Mockito :默认模拟策略更改为 inline 复制链接链接已复制到粘贴板!
在早期版本中,quarkus-junit5-mockito
依赖项被配置为使用 子类
模拟策略来创建模拟对象。
从红帽构建的 Quarkus 3.20 开始,依赖项现在被配置为默认 使用内联
模拟策略。
1.4.8.3. Quarkus Test Framework JUnit 5 Mockito 版本对齐 复制链接链接已复制到粘贴板!
在 Red Hat build of Quarkus 3.20.0 中,quarkus-junit5-mockito
依赖项因为依赖项版本中有有意不匹配而临时无法正常工作。Mockito 的版本使用所需的 JUnit 5.11 或更高版本,但平台包含 JUnit 5.10。
要解决这个问题,红帽构建的 Quarkus 3.20.1 将 JUnit 升级到 5.12.1 版本。这个版本与 JUnit 和 Mockito 的版本一致,并恢复 quarkus-junit5-mockito
依赖项的兼容性。
此更新的影响应该最少。社区和 Camel Quarkus 中的测试没有显示任何回归问题。如需更多信息,请参阅相关问题 :https://github.com/quarkusio/quarkus/issues/46858。
红帽构建的 Quarkus 不支持或测试 quarkus-junit5-mockito 扩展。这里提到的了解用户已包含在其应用程序依赖项中时。
临时解决方案
如果您在 JUnit 5.12.1 时遇到问题,您可以覆盖 Maven 项目中的 JUnit 版本,以使用红帽构建的 Quarkus 3.20.0 中的版本。
为确保所有 JUnit 工件的一致性,请导入 3.20.0 中使用的 JUnit BOM 版本,如下所示:
junit-bom
不是红帽构建的 Quarkus 3.20.0 支持的测试库。如果您选择使用 BOM 来对齐 JUnit 依赖项,请使用 JUnit 项目中的上游版本。
1.4.9. Web 复制链接链接已复制到粘贴板!
如果启用了 HTTP 压缩,quarkus.http.compress-media-types
配置属性定义要压缩的介质类型列表。在 Red Hat build of Quarkus 3.20 中,此属性的默认值已更改。新压缩的介质类型现在包含 application/json
和 application/xhtml+xml
。
1.4.9.2. REST Client :用于优化查找的严格配置 复制链接链接已复制到粘贴板!
在 Red Hat build of Quarkus 3.20 中,REST 客户端配置更为严格,以减少检索配置所需的查找和组合数量:
-
MicroProfile Rest Client config style
[Simple Class Name]/mp-rest
无法正常工作。该规范没有指定这种样式。FQCN/mp-rest
风格继续按预期工作,具体由 MicroProfile Rest 客户端指定。 -
只有红帽构建的 Quarkus 发现的 REST 客户端才会由
RestClientsConfig
和RestClientsBuildTimeConfig
加载。 -
RestClientsConfig#clients
和RestClientsBuildTimeConfig#client
映射始终使用 REST 客户端接口的 Fully Qualified Collection Name (FQCN)。之前,它将使用找到的所有密钥,即使与同一 REST 客户端复制条目相关。 -
删除了旧配置名称
quarkus.rest.client.max-redirects
和quarkus.rest.client.multipart-post-encoder-mode
。
1.4.9.3. Qute: JSON 模板中的默认字符转义 复制链接链接已复制到粘贴板!
从红帽构建的 Quarkus 3.20 开始,quarkus-qute
扩展会自动转义双引号("
)、反斜杠(\
),如果设置了对应的模板变体,则 JSON 模板中的U+0000
到 U+001F
)。扩展会自动为 src/main/resources/templates
目录中的模板分配一个变体。
默认情况下,java.net.URLConnection#getFileNameMap ()
决定模板文件的内容类型。您可以使用 quarkus.qute.content-types
配置来定义额外的后缀到内容类型映射。
要呈现未转义的值,请使用 raw
或 secure
属性,它们作为 java.lang.Object
的扩展方法实现,或者在 io.quarkus.qute.RawString
类中嵌套字符串值。
如需更多信息,请参阅 Quarkus "Qute 参考" 指南中的 Character escapes 部分。
在带有 quarkus-rest-jackson
扩展的 Quarkus 3.20 中,只有 ObjectMapperCustomizer
Bean 应用到 Jackson JSON 处理器的默认 ObjectMapper
实例。
在早期版本中,所有自定义器 Bean (包括带有自定义限定符)都应用到默认的 ObjectMapper
实例。
这个更改需要手动干预。它不包括在 将应用程序迁移到红帽构建的 Quarkus 3.20 指南中的自动更新过程中。
如需更多信息,请参阅以下资源:
- 增强 Jackson JSON 处理,红帽构建的 Quarkus 3.20 发行注记中的 reflection-free deserialization 部分。
- Quarkus "Writing JSON REST Services" 指南中的 Configuring JSON support 部分。
1.4.9.5. rest: Empty 查询参数现在作为 null 或空集合处理 复制链接链接已复制到粘贴板!
在以前的版本中,使用 quarkus-rest
扩展,带有空值的查询参数(如 ?foo=
)被反序列化,如下所示:
-
@RestQuery String foo
生成空字符串(""
)。 -
@RestQuery List<String> foo
生成一个包含单个空字符串的集合。
在 Red Hat build of Quarkus 3.20 中,此行为已更改:
-
@RestQuery String foo
现在反序列化为null
。 -
@RestQuery List<String> foo
现在被反序列化为空集合。
相应地更新您的代码。
这个更改需要手动干预。它不包括在 将应用程序迁移到红帽构建的 Quarkus 3.20 指南中的自动更新过程中。
1.4.9.6. Websocket 和 WebSockets 客户端扩展已弃用 复制链接链接已复制到粘贴板!
红帽构建的 Quarkus 3.20 弃用 quarkus-websockets
和 quarkus-websockets-client
扩展,该扩展实现了 Jakarta WebSocket 规格。
Red Hat build of Quarkus 计划在以后的发行版本中停止支持这些扩展。
为确保与即将推出的版本兼容,请迁移到 Quarkus WebSockets Next 扩展quarkus-websockets-next
,它提供现代、效率更高的 WebSocket API。
如需更多信息,请参阅以下 Quarkus 资源:
- WebSocket Next 入门
- Websocket 下一步参考指南
- quarkus WebSockets Next extension 部分 "Release Notes for Red Hat build of Quarkus 3.20" 指南中的
这个更改需要手动干预。它不包括在 将应用程序迁移到红帽构建的 Quarkus 3.20 指南中的自动更新过程中。