1.4. 影响与早期版本兼容的更改
本节论述了红帽构建的 Quarkus 3.27 中的更改,它们会影响使用早期产品版本构建的应用程序的兼容性。
查看这些有问题的更改,并采取必要的步骤来确保应用程序在将其更新至红帽构建的 Quarkus 3.27 后继续正常工作。
您可以通过运行 quarkus update 或等同的 Maven 命令来执行本节中列出的许多更新。这会触发将项目依赖项和源代码更新至最新红帽构建的 Quarkus 版本的自动化 OpenRewrite 方法。
但是,并非所有迁移任务都是自动化的。如果自动更新没有应用特定的更新,这可能是因为可用的 OpenRewrite 方法未涵盖所需的迁移任务,或者您的项目依赖的扩展与最新版本不兼容。在这种情况下,您需要手动执行更新。务必查看以下项目以识别和解决任何手动迁移任务。
1.4.1. 兼容性 复制链接链接已复制到粘贴板!
1.4.1.1. transaction: QuarkusTransaction.isActive () 弃用 复制链接链接已复制到粘贴板!
在当前发行版本中,QuarkusTransaction.isActive () 方法已被弃用。
方法的行为是模糊的,不可靠地表示事务状态。
使用 getStatus () 方法确定当前的事务状态。更新所有现有的 isActive () 来使用 getStatus () 以确保行为正确。
要应用此更改,请手动执行本发行注记中介绍的其他步骤。迁移应用程序到红帽构建的 Quarkus 3.27 指南中的自动更新流程不包括此更改。
如需更多信息,请参阅 Quarkus 迁移指南 3.22。
1.4.2. Core 复制链接链接已复制到粘贴板!
1.4.2.1. Configuration: Legacy config class removed 复制链接链接已复制到粘贴板!
在当前发行版本中,Quarkus 删除了对旧配置类的支持。依赖于扩展的应用程序(包括基于传统配置类构建的自定义扩展)无法构建。
将受影响的扩展更新为使用 @io.smallrye.config.ConfigMapping 的版本,或相应地迁移自定义扩展。
例如,将兼容性类 GlobalDevServicesConfig 替换为 DevServicesConfig。
要应用此更改,请手动执行本发行注记中介绍的其他步骤。迁移应用程序到红帽构建的 Quarkus 3.27 指南中的自动更新流程不包括此更改。
如需更多信息,请参阅以下资源:
- Quarkus 迁移指南 3.26:旧的配置类支持已不存在
- Quarkus Sunsetting 传统配置类博客
1.4.2.2. 配置:在配置属性中使用 .enabled 而不是 .enable 复制链接链接已复制到粘贴板!
在当前发行版本中,功能切换配置使用 .enabled 后缀,而不是 .enable。这个更改提高了配置属性的一致性,并防止混合使用后缀。旧的 .enable 属性在向后兼容时仍然被识别,但已弃用。
运行 quarkus update 以自动迁移您的配置。如果手动更新,请将 quarkus.log.console.enable 等键重命名为 quarkus.log.console.enabled,以避免弃用警告。命名日志记录处理程序遵循相同的规则,并使用 quarkus.log.handler://[."handler-name".enabled。
例 1.1. 受影响的属性包括:
-
quarkus.keycloak.policy-enforcer.enablequarkus.keycloak.policy-enforcer.enabled -
quarkus.log.console.enablequarkus.log.console.enabled -
quarkus.log.console.async.enablequarkus.log.console.async.enabled -
quarkus.log.file.enablequarkus.log.file.enabled -
quarkus.log.file.async.enablequarkus.log.file.async.enabled -
quarkus.log.syslog.enablequarkus.log.syslog.enabled -
quarkus.log.syslog.async.enablequarkus.log.syslog.async.enabled -
quarkus.log.socket.enablequarkus.log.socket.enabled -
quarkus.log.socket.async.enablequarkus.log.socket.async.enabled -
quarkus.snapstart.enablequarkus.snapstart.enabled -
quarkus.smallrye-health.ui.enablequarkus.smallrye-health.ui.enabled -
quarkus.smallrye-graphql.ui.enablequarkus.smallrye-graphql.ui.enabled -
quarkus.smallrye-openapi.enablequarkus.smallrye-openapi.enabled -
quarkus.swagger-ui.enablequarkus.swagger-ui.enabled
要应用此更改,请运行 Migrating applications to Red Hat build of Quarkus 3.27 指南中的自动更新过程。
如需更多信息,请参阅 配置属性 中的 Quarkus 迁移指南 3.26: '.enable' to '.enabled'。
1.4.2.3. jgit: Dependency removed from quarkus-bom 复制链接链接已复制到粘贴板!
在当前发行版本中,org.eclipse.jgit 依赖项不再在 quarkus-bom 中管理。
现在,如果您的应用程序依赖于 JGit,请在依赖项中添加 quarkus-jgit 扩展以确保原生镜像兼容性并使用兼容库版本。
红帽构建的 Quarkus 不支持 quarkus-jgit 扩展。
要应用此更改,请手动执行本发行注记中介绍的其他步骤。迁移应用程序到红帽构建的 Quarkus 3.27 指南中的自动更新流程不包括此更改。
如需更多信息,请参阅 Quarkus 迁移指南 3.22。
1.4.2.4. json-RPC:扩展必须始终生成 JsonRPCProvidersBuildItem 复制链接链接已复制到粘贴板!
在当前发行版中,无论构建模式如何,都必须生成 JsonRPCProvidersBuildItem。
在以前的版本中,大多数扩展只以 dev 模式生成此构建项目,方法是使用 @BuildStep (onlyIf = IsDevelopment.class)。
现在,构建过程在构建时需要此项目,以便在 JSON-RPC 类上启用执行模型验证。
构建过程使用此项目来标识 JSON-RPC 端点,特别是使用注解的类,如 @Blocking、@NonBlocking 或 @RunOnVirtualThread。
要迁移,请按如下所示替换条件构建步骤:
之前使用的代码:
@BuildStep(onlyIf = IsDevelopment.class) JsonRPCProvidersBuildItem createJsonRPCService() { return new JsonRPCProvidersBuildItem(...); }@BuildStep(onlyIf = IsDevelopment.class) JsonRPCProvidersBuildItem createJsonRPCService() { return new JsonRPCProvidersBuildItem(...); }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新的代码:
@BuildStep JsonRPCProvidersBuildItem createJsonRPCService() { return new JsonRPCProvidersBuildItem(...); }@BuildStep JsonRPCProvidersBuildItem createJsonRPCService() { return new JsonRPCProvidersBuildItem(...); }Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Quarkus 之前为 JSON-RPC 类提供了回退检测机制。该机制在当前发行版本中被删除。
要应用此更改,请手动执行本发行注记中介绍的其他步骤。迁移应用程序到红帽构建的 Quarkus 3.27 指南中的自动更新流程不包括此更改。
有关更多信息,请参阅 Quarkus 迁移指南 3.22:扩展必须生成 JsonRPCProvidersBuildItem 始终。
1.4.2.5. Stork:不再由 REST 客户端管理 复制链接链接已复制到粘贴板!
在当前发行版本中,Stork 不再是 REST 客户端的内置依赖项。
现在,您必须将 quarkus-stork 扩展添加到项目依赖项中,才能将 Stork 与 REST 客户端一起使用。
要应用此更改,请手动执行本发行注记中介绍的其他步骤。迁移应用程序到红帽构建的 Quarkus 3.27 指南中的自动更新流程不包括此更改。
如需更多信息,请参阅 Quarkus 迁移指南 3.22。
1.4.2.6. 删除测试 native-image-profile 配置属性 复制链接链接已复制到粘贴板!
中断更改:当前发行版本会删除长期弃用的 quarkus.test.native-image-profile 配置属性。更新仍在使用已删除属性的任何配置,以使用当前的 quarkus.test.integration-test-profile 属性。
quarkus.test.integration-test-profile 属性指定在运行带有 @QuarkusIntegrationTest 的测试时要使用的配置配置文件:
- 类型:字符串
-
默认值:
prod -
环境变量:
QUARKUS_TEST_INTEGRATION_TEST_PROFILE - 配置时间:在构建时修复
要应用此更改,请手动执行本发行注记中介绍的其他步骤。迁移应用程序到红帽构建的 Quarkus 3.27 指南中的自动更新流程不包括此更改。
1.4.3. data 复制链接链接已复制到粘贴板!
1.4.3.1. 删除 Apache Derby 数据库支持 复制链接链接已复制到粘贴板!
在当前发行版本中,红帽构建的 Quarkus 中删除了对 Apache Derby 数据库的支持。
Apache Derby 在以前的版本中已被弃用,现已完全删除。使用 Derby 的应用应该迁移到受支持的数据库,如 PostgreSQL、MySQL、MariaDB 或 支持的配置 中列出的另一个数据库。
如果您的应用程序当前使用 Derby,则需要:
- 更新应用程序依赖项以删除 Derby JDBC 驱动程序
-
更新
application.properties或application.yaml,以配置不同的数据库 - 将现有的 Derby 数据库模式和数据迁移到新数据库中
有关在红帽构建的 Quarkus 中配置数据源的详情,请参考 配置数据源。
要应用此更改,请手动执行本发行注记中介绍的其他步骤。迁移应用程序到红帽构建的 Quarkus 3.27 指南中的自动更新流程不包括此更改。
1.4.3.2. dev Services 默认镜像更新 复制链接链接已复制到粘贴板!
在当前发行版本中,以下 Dev Services 的默认镜像更新至以下版本:
- Elasticsearch 版本 9.1
- OpenSearch 版本 3.1
中断更改:如果应用程序需要这些镜像的特定版本,您必须明确配置容器镜像。例如:
quarkus.elasticsearch.devservices.image-name=docker.io/elastic/elasticsearch:9.1.3
quarkus.elasticsearch.devservices.image-name=docker.io/elastic/elasticsearch:9.1.3
要应用此更改,请手动执行本发行注记中介绍的其他步骤。迁移应用程序到红帽构建的 Quarkus 3.27 指南中的自动更新流程不包括此更改。
如需更多信息,请参阅 Quarkus "Dev Services for Elasticsearch" 指南中的 配置 镜像部分。
1.4.3.3. Hibernate ORM:数据库版本检查 复制链接链接已复制到粘贴板!
在当前发行版本中,Hibernate ORM 改进了数据库版本检查。
早期版本已应用这些检查 ; 这个版本提高了版本检测准确性,并扩展了在启动时运行的检查范围。
如果应用程序启动失败版本检查,请为您的托管设置正确的数据库版本,或将数据库升级到受支持的版本。
使用 CockroachDialect 时,请将 CockroachDB 版本(不是 PostgreSQL 版本)设置为与应用连接的服务器匹配。
要应用此更改,请手动执行本发行注记中介绍的其他步骤。迁移应用程序到红帽构建的 Quarkus 3.27 指南中的自动更新流程不包括此更改。
如需更多信息,请参阅 Quarkus 迁移指南 3.25。
1.4.3.4. Hibernate ORM: Schema 管理配置属性重命名 复制链接链接已复制到粘贴板!
在当前发行版本中,以下 Hibernate ORM (quarkus-hibernate-orm)扩展属性被重命名为简化 YAML 配置,并为将来的更改做好准备。
在当前发行版本中,旧的属性保持识别,但已弃用,计划在以后的发行版本中删除。
在升级到当前版本时,请使用新属性。
| 旧属性名称 | 新属性名称 |
|---|---|
| quarkus.hibernate-orm.database.generation | quarkus.hibernate-orm.schema-management.strategy |
| quarkus.hibernate-orm.database.generation.create-schemas | quarkus.hibernate-orm.schema-management.create-schemas |
| quarkus.hibernate-orm.database.generation.halt-on-error | quarkus.hibernate-orm.schema-management.halt-on-error |
要应用此更改,请运行 Migrating applications to Red Hat build of Quarkus 3.27 指南中的自动更新过程。
1.4.3.5. Hibernate ORM:升级到版本 7.1 复制链接链接已复制到粘贴板!
在当前发行版本中,Hibernate ORM 已升级到版本 7.1。此升级引入了可能会影响应用程序的破坏更改。
API 更改
弃用的
Session方法已被删除,或被 JPA equivalents 替代。要应用标记为 "Automatic" 的更改,请运行 Migrating applications to Red Hat build of Quarkus 3.27 指南中所述的更改,否则手动执行任何其他步骤。
Expand 弃用的 Session方法新的 JPA 等效 更新过程 load (…) without a lock 选项
getReference(…)
自动
get(…)
find(…)
自动
delete(…)
remove(…)
自动
save(…)
persist(…)
自动
update(…)
merge(…)
Manual
load (…) with a lock 选项
find(…)
Manual
saveOrUpdate(…)
持久性(新实体)/合并(持久性,然后分离的实体)
Manual
注意当从更新方法迁移到
合并方法时,请注意以下区别:-
合并会返回附加到持久性上下文的实体实例。确保您使用该实体并丢弃作为参数传递的实体。 -
为确保正确合并,
合并可以加载实体。当在连续的多个实体中使用合并时,可能会发生N+1选择的问题。要避免这个问题,请在合并调用前载入会话中的所有实体,例如使用Session"findMultiple。
要应用此更改,请手动执行本发行注记中介绍的其他步骤。
如需更多信息,请参阅 Hibernate ORM Defer to JPA。
-
- 弃用的注解已被删除或替换为 JPA equivalents。要查看受影响的注解,请参阅 Hibernate ORM Annotations。
@Cascade和CascadeType已被弃用,并被 JPA equivalents 替代,如@OneToMany (cascade = …)。要应用此更改,请运行 Migrating applications to Red Hat build of Quarkus 3.27 指南中的自动更新过程。
-
代理自定义已更改。如果您使用
@Proxy,请考虑@ConcreteProxy,或使用Session#getReference或Hibernate"unproxy方法。如需更多信息,请参阅 Hibernate ORM 替换 @Proxy。 -
org.hibernate.Metamodel已被删除,并被org.hibernate.metamodel.model.domain.JpaMetamodel取代。 -
UserType和CompositeType方法签名不再引用内部或服务提供商接口(SPI)类型。如需更多信息,请参阅 Hibernate ORM UserType 和 CompositeUserType 更改。 -
各种 JDBC 类型已移至内部软件包。要将属性映射到这些类型,请使用
@JdbcTypeCode而不是@JdbcType。 -
LockOptions类已弃用;受影响的方法有涉及LockMode的替代方案。LockOptions类的一些已弃用的功能也已被删除。如需更多信息,请参阅 Hibernate ORM LockOptions。 -
Session#getLobHelper方法已弃用。使用Hibernate"getLobHelper替代。如需更多信息,请参阅 Hibernate ORMSession#getLobHelper。
行为更改
更严格的注解验证
现在,错误的映射注解会引发异常,而不是被忽略。示例包括冲突
@Basic和@ManyToOne注释,或者@Id和@Version上的属性转换器使用。如需更多信息,请参阅 Hibernate ORM 域模型验证。第二级缓存使用情况
StatelessSession现在默认使用第二级缓存。此更改会影响迁移使用第二级缓存和无状态会话的应用。如需更多信息,请参阅 Hibernate ORM StatelessSession 和 second-Level 缓存。批处理操作更改
StatelessSession不遵循quarkus.hibernate-orm.jdbc.statement-batch-size设置。由于StatelessSession操作旨在立即执行,因此不需要隐式批处理操作。您可以使用显式批处理操作,如 'insertMultiple ()'。如需更多信息,请参阅 Hibernate ORM StatelessSession 和 JDBC 批处理。查询验证
不再接受模糊的查询字符串。这主要会影响
type-unsafe查询,当没有将类传递给Session""createQuery时,或使用 Panache 创建查询时。现在,没有select子句的查询,但带有非抓取加入,现在必须指定预期的行为。如需更多信息,请参阅 带有隐式 SELECT 和没有显式结果类型的 Hibernate ORM Query。对由原生查询返回的日期和时间值的更改
在以前的版本中,
java.sql类型用于表示原生查询返回的日期和时间类型。现在,如果没有特定类型指令,原生查询会返回java.time类型。如需更多信息,请参阅 原生查询返回的 Hibernate ORM 临时类型。
最小数据库版本
最低所需的数据库版本已更新,以使用相应供应商仍然支持最旧的版本。
请特别注意以下更新:
- IBM DB2:从 10.5 更新至 11.1 的最低版本
- MariaDB:将最小版本从 10.4 更新至 10.6
- Microsoft SQL Server:从 11.0 (2012)更新至 12.0 (2014)的最低版本.
PostgreSQL:从 12.0 更新至 13.0 的最低版本
有关当前最小版本的更多信息,请参阅 Hibernate ORM 支持的 dialects。
MySQL/MariaDB 存储引擎
使用
quarkus.hibernate-orm.dialect.storage-engine设置 MySQL/MariaDB 存储引擎已被弃用。使用quarkus.hibernate-orm.dialect.mariadb.storage-engine=…或quarkus.hibernate-orm.dialect.mysql.storage-engine=…。DDL/schema 更改
- 自定义数据库初始化脚本(特别是 H2 数据库)可能需要更改,以避免使用引号。
-
现在,基本阵列被映射到数据库中的正确阵列结构,而不是序列化为二进制数据。您可以通过将
quarkus.hibernate-orm.unsupported-properties."hibernate.type.preferred_array_jdbc_type"设置为VARBINARY来恢复此行为。否则,如果您的实体映射包含数组,则需要对数据库 schema 和手动更新数据。如需更多信息,请参阅 Hibernate ORM Array 映射更改。 -
char/Character属性现在映射到varchar (1),而不是char (1)。 - 在 Oracle 和 Microsoft SQL Server 上,时间戳属性有不同的默认子秒精度。
-
在 Oracle 上,
float和double属性映射到binary_float和binary_double,而不是float (p)、real或double精度类型。如需更多信息,请参阅 Hibernate ORM 更改会影响 DDL。
注解处理器更改
-
Hibernate ORM 注解处理器的 Maven 工件已从
org.hibernate.orm:hibernate-jpamodelgen改为org.hibernate.orm:hibernate-processor。在 Maven 中,更新annotationProcessorPath。 注释处理器
org.hibernate.jpamodelgen.rhgsMetaModelEntityProcessor已弃用,而使用org.hibernate.processor.HibernateProcessor。要应用此更改,请运行 Migrating applications to Red Hat build of Quarkus 3.27 指南中的自动更新过程。
-
Hibernate ORM 注解处理器的 Maven 工件已从
Hibernate ORM 组件的上下文和依赖项注入(CDI)限制
某些可插拔组件(可能在 CDI 初始化之前检索)不再是 CDI Bean。
如果您需要提供此类组件的自定义实施,并且需要访问该实施中的 CDI,请考虑使用
Arc.container ().instance (OtherBean.class).get ()来检索其他 Bean。有关受影响的组件列表,请参阅 迁移指南 3.24。
JSON/XML 映射
在以前的版本中,在数据库中为 JSON/XML 序列化的 Hibernate ORM 的"格式映射器"默认依赖于全局 REST 层序列化设置。
现在,最好隔离数据库层和 REST 层序列化,以帮助确保数据库格式稳定性并防止不必要的迁移。但是,如果满足以下条件,当前的发行版本默认会失败:
- 您的应用程序有一个 Hibernate 映射,涉及存储在数据库中的 XML 或 JSON。
- REST 层的 XML 或 JSON 序列化设置是自定义的。
如果发生这种情况,您可以更新数据库序列化设置:
基于 Jacks 的 JSON 序列化
如果应用程序中应用的
ObjectMapper自定义不会影响数据库中存储的 JSON 格式,请通过指定quarkus.hibernate-orm.mapping.format.global=ignore来绕过该ObjectMapper。否则,实施自定义
FormatMapperbean。首先,将格式映射器委派给全局 REST 层序列化。如需更多信息,请参阅 Quarkus "使用 Hibernate ORM 和 Jakarta Persistence" 指南中的 迁移指南 3.26 和 自定义 JSON/XML serialization/deserialization 部分。
然后,执行以下操作之一:
-
如果要依赖全局配置的
ObjectMapper并依赖于 REST 层序列化需求,请继续使用此委派格式映射器。 -
准备并测试迁移脚本以更新 JSON 数据。您可以使用 Hibernate ORM 的默认格式,或者根据您的需要调整
FormatMapper实现格式化 JSON。
-
如果要依赖全局配置的
基于 JSON-B 的 JSON 序列化
这个场景与基于 Jackson 的映射程序相同。如需更多信息,请参阅 迁移指南 3.26。
基于 JAXB 的 XML 序列化
Hibernate ORM 7.0 中的 XML 序列化格式更改也会有影响。虽然 Quarkus 内置的 JAXB 格式映射器使用传统格式,但删除或绕过使用
quarkus.hibernate-orm.mapping.format.global=ignore格式的格式不兼容。为缓解缓解,创建一个委派到 Hibernate ORM 的映射器的映射程序。如需更多信息,请参阅 迁移指南 3.26。
然后,执行以下操作之一:
- 如果要依赖旧格式,请继续使用这个委派的格式映射器。
-
准备并测试迁移脚本以更新 XML 数据。您可以使用 Hibernate ORM 的默认格式,或者根据您的需要调整
FormatMapper实现格式化 XML。
要应用此更改,请手动执行本发行注记中介绍的其他步骤。迁移应用程序到红帽构建的 Quarkus 3.27 指南中的自动更新流程不包括此更改。
如需更多信息,请参阅以下资源:
1.4.3.6. Hibernate Reactive :数据库版本检查 复制链接链接已复制到粘贴板!
在当前发行版本中,Hibernate Reactive 会在启动期间验证数据库版本。
这个更改可确保与支持的数据库兼容,并防止应用程序针对不被支持的版本或不兼容的版本运行。
如果您的应用程序连接到不符合 Hibernate Reactive 的要求的数据库版本,启动会失败,并显示一条清晰的错误消息。
要解决这个问题,将数据库升级到受支持的版本,或者相应地调整您的设置。
如需更多信息,请参阅 Quarkus 迁移指南 3.25。
1.4.3.7. Hibernate Reactive :升级到版本 3.1 复制链接链接已复制到粘贴板!
在当前发行版本中,Hibernate Reactive 已升级到版本 3.1。
Hibernate Reactive 3.1 仍然与大多数应用程序的 3.0 兼容,但它会继承 Hibernate ORM 中的更改。
有关 Hibernate ORM 破坏更改的更多信息,请参阅 Hibernate ORM: Upgraded 到版本 7.1 发行注记。
另外还引进了以下 Hibernate 被动中断更改:
API 更改
ReactiveIdentifierGeneratorAPI 已更新,现在扩展了org.hibernate.generator.Generator,这需要额外的方法。此更改会影响定义自定义标识符生成器的用户,方法是使用
@GenericGenerator注释和实施自己的生成器类。要实施新的 API,请更新使用
@GenericGenerator定义的自定义标识符生成器。在
Generator接口中,更新以下方法:-
generatedOnExecution ():如果在查询执行过程中生成标识符,则返回true,如果在应用程序代码中生成标识符,则返回false。 -
getEventTypes ():指定标识符在插入或更新操作期间是否有变化。
-
最小数据库版本
quarkus-hibernate-reactive扩展与其最低支持的数据库版本与 Hibernate ORM 7.1 dialect 要求保持一致。有关当前最小版本的更多信息,请参阅 Hibernate ORM 支持的 dialects。
要应用此更改,请手动执行本发行注记中介绍的其他步骤。迁移应用程序到红帽构建的 Quarkus 3.27 指南中的自动更新流程不包括此更改。
1.4.3.8. Hibernate Search: Upgraded to version 8.1 复制链接链接已复制到粘贴板!
在当前发行版本中,Hibernate Search 已升级到版本 8.1。
当升级到 8.x 版本系列时,会引入一些可能会影响应用程序的更改。
-
弃用的类会被移除,以替代其推荐的替代方案。值得注意的是,
org.hibernate.search.mapper.orm.masindexing.MassIndexingMonitor被org.hibernate.search.mapper.pojo.masindexing.MassIndexingMonitor替代。 -
MassIndexingMonitor SerialaddToTotalCount方法已弃用,并替换为 MasIndexingMonitor"typeGroupMonitor (..) -
projection DSL 中的
multi ()方法已弃用,并替换为.list ()/.set ()/sortedSet ()/collector (…)。 -
日志记录类别已更新。特别是
org.hibernate.search.elasticsearch.request日志记录类别,用于记录发送到 Elasticsearch 的每个请求,并已重命名为org.hibernate.search.elasticsearch.client.request。如需更多信息,请参阅所有可用日志记录类别的列表。 -
改进了搜索 DSL 接口,使其包含额外的
SR类型参数参考指南。 - mass 索引日志的格式已更改为以精简格式显示更多信息。
-
指标聚合
countDistinct ()已被弃用,并替换为count ()aggregation: .count ().field (.).distinct ()的选项。
如需更多信息,请参阅以下资源:
1.4.4. 消息传递 复制链接链接已复制到粘贴板!
1.4.4.1. Apache Kafka:客户端升级到版本 4.0.0 复制链接链接已复制到粘贴板!
在当前发行版本中,Apache Kafka 客户端工件 kafka-clients (在 quarkus-kafka-client 扩展中使用的)已升级到版本 4.0.0。
此版本包括以下更改:
- 删除 ZooKeeper 依赖项
- 删除了对一些较旧的协议或 API 版本的支持
- 与依赖已弃用功能的旧客户端或代理不兼容
- Quarkus 应用程序的 Java 版本 11 的最低要求
- 客户端指标的改进
您仍然可以连接到 Apache Kafka 3.x 代理。依赖于删除的协议版本的旧代理可能不兼容。
如需更多信息,请参阅以下资源:
- Apache Kafka 4.0 文档
- Quarkus Apache Kafka 参考指南
1.4.5. Observability(可观察性) 复制链接链接已复制到粘贴板!
1.4.5.1. OpenTelemetry :对指标的更改 复制链接链接已复制到粘贴板!
在当前发行版本中,quarkus-opentelemetry 扩展提供的 OpenTelemetry 指标已更改。
默认情况下禁用 OpenTelemetry 指标。启用后,通过设置 quarkus.otel.metrics.enabled=true,收集与 JVM 和 HTTP 服务器相关的指标。
下表列出了现在可用的 OpenTelemetry 指标。请注意,jvm.system.cpu.utilization 指标在 JVM 模式中被删除,改为使用 jvm.cpu.recent_utilization。
| 指标名称 | 描述 | 类型 | JVM 上提供 | 在原生中可用 | MP Telemetry 2.0 |
|---|---|---|---|---|---|
| http.server.request.duration | HTTP 服务器请求的持续时间 | HISTOGRAM | Y | Y | Y |
| jvm.memory.committed | 内存已提交的指标 | LONG_SUM | Y | 没有生成数据 | Y |
| jvm.memory.used | 使用的内存测量 | LONG_SUM | Y | 没有生成数据 | Y |
| jvm.memory.limit | 最大可获取内存的测量 | LONG_SUM | Y | 不存在 | Y |
| jvm.memory.used_after_last_gc | 测量这个池上最近垃圾回收事件后所使用的内存 | LONG_SUM | Y | 没有生成数据 | Y |
| jvm.gc.duration | JVM 垃圾回收操作的持续时间 | HISTOGRAM | Y | 不存在 | Y |
| jvm.class.count | 当前载入的类数 | LONG_SUM | Y | 没有生成数据 | Y |
| jvm.class.loaded | 自 JVM 启动时加载的类数 | LONG_SUM | Y | 没有生成数据 | Y |
| jvm.class.unloaded | 自 JVM 启动时卸载的类数 | LONG_SUM | Y | 没有生成数据 | Y |
| jvm.cpu.count | JVM 可用的处理器数量 | LONG_SUM | Y | Y | N |
| jvm.cpu.limit | LONG_SUM | Y | 没有生成数据 | N | |
| jvm.cpu.time | JVM 报告的进程的 CPU 时间 | DOUBLE_SUM | Y | 不存在 | N |
| jvm.system.cpu.utilization | JVM 报告的进程的 CPU 时间 | DOUBLE_SUM | 不存在 | 没有生成数据 | N |
| jvm.cpu.recent_utilization | JVM 报告的进程的最近 CPU 利用率 | DOUBLE_GAUGE | Y | 没有生成数据 | N |
| jvm.cpu.longlock | 长锁定时间 | HISTOGRAM | Y | Y | N |
| jvm.cpu.context_switch | DOUBLE_SUM | Y | 没有生成数据 | N | |
| jvm.network.io | 网络读/写字节 | HISTOGRAM | Y | 不存在 | N |
| jvm.network.time | 网络读/写持续时间 | HISTOGRAM | Y | 不存在 | N |
| jvm.thread.count | 执行平台线程数量 | LONG_SUM | Y | Y | Y |
要应用此更改,请手动执行本发行注记中介绍的其他步骤。迁移应用程序到红帽构建的 Quarkus 3.27 指南中的自动更新流程不包括此更改。
如需更多信息,请参阅以下资源:
- 使用 OpenTelemetry 指标 指南
- Quarkus 迁移指南 3.25: OpenTelemetry 指标
1.4.6. 安全性 复制链接链接已复制到粘贴板!
在当前发行版本中,已弃用的 blocking HttpAuthenticationMechanism.getCredentialTransport () 方法已被删除。
如果您的应用程序或自定义安全扩展覆盖此方法,您必须更新实施以避免编译错误。
通过实现被动版本替换删除的方法,如下例所示:
Uni<HttpCredentialTransport> getCredentialTransport(RoutingContext context) {
return Uni.createFrom().item(myHttpCredentialTransport);
}
Uni<HttpCredentialTransport> getCredentialTransport(RoutingContext context) {
return Uni.createFrom().item(myHttpCredentialTransport);
}
要应用此更改,请手动执行本发行注记中介绍的其他步骤。迁移应用程序到红帽构建的 Quarkus 3.27 指南中的自动更新流程不包括此更改。
1.4.6.2. TLS Registry 扩展重构 复制链接链接已复制到粘贴板!
在当前发行版本中,TLS Registry 扩展(quarkus-tls-registry)已被重组,以避免在 runtime 和 spi 模块间分割软件包。
作为这个 reorganization 的一部分,io.quarkus.tls.TlsRegistryBuildItem 类已重命名为 io.quarkus.tls.deployment.spi.TlsRegistryBuildItem。它仍然位于 spi 模块中。
如果您已有引用之前的 TlsRegistryBuildItem 类位置的代码,请更新您的导入以使用当前软件包:
// Earlier import import io.quarkus.tls.TlsRegistryBuildItem; // Current import import io.quarkus.tls.deployment.spi.TlsRegistryBuildItem;
// Earlier import
import io.quarkus.tls.TlsRegistryBuildItem;
// Current import
import io.quarkus.tls.deployment.spi.TlsRegistryBuildItem;
此更改与 Quarkus 项目中推荐的架构改进一致,以保持部署和运行时组件之间的更清晰的隔离。
要应用此更改,请手动执行本发行注记中介绍的其他步骤。迁移应用程序到红帽构建的 Quarkus 3.27 指南中的自动更新流程不包括此更改。
1.4.7. 工具 复制链接链接已复制到粘贴板!
1.4.7.1. 扩展开发人员:删除了传统配置类的支持 复制链接链接已复制到粘贴板!
中断更改:删除了使用旧配置类和 -AlegacyConfigRoot=true 注解处理器选项构建扩展的支持。
扩展现在必须使用标有 @ConfigMapping 和 @ConfigRoot 的配置接口。
要应用此更改,请手动执行本发行注记中介绍的其他步骤。迁移应用程序到红帽构建的 Quarkus 3.27 指南中的自动更新流程不包括此更改。
如需更多信息,请参阅以下资源:
在当前发行版本中,Gradle 任务 testNative 和 quarkusIntTest 不再依赖于 测试 任务。
现在,它们分别仅执行原生测试和集成测试,允许独立测试执行阶段。
如果您之前依赖于在运行原生或集成测试时包含单元测试的默认任务依赖项,请更新构建脚本。
要应用此更改,请手动执行本发行注记中介绍的其他步骤。迁移应用程序到红帽构建的 Quarkus 3.27 指南中的自动更新流程不包括此更改。
如需更多信息,请参阅 Quarkus 迁移指南 3.22。
1.4.8. Web 复制链接链接已复制到粘贴板!
在当前发行版本中,使用 lambda 在 REST 客户端中定义 ContextResolver 会抛出 IllegalArgumentException。
这是因为 REST 客户端扩展无法推断通用类型,这与之前默认为对象的版本不同。
使用 concrete ContextResolver 实现替换 lambdas,以避免运行时错误并确保正确的 REST 客户端配置。
要应用此更改,请手动执行本发行注记中介绍的其他步骤。迁移应用程序到红帽构建的 Quarkus 3.27 指南中的自动更新流程不包括此更改。
如需更多信息,请参阅 Quarkus 迁移指南 3.22。
1.4.8.2. Panache REST:Jakarta REST 资源限制为 Quarkus REST 复制链接链接已复制到粘贴板!
在当前发行版本中,使用 Panache 的 Jakarta REST 资源类只适用于 Quarkus REST 模块。
REST Data Panache 模块不再可用于 RESTEasy 经典模块。
受影响的模块列表:
-
quarkus-hibernate-orm-rest-data-panache -
quarkus-hibernate-reactive-rest-data-panache -
quarkus-mongodb-rest-data-panache -
spring-data-rest
使用 Quarkus REST, quarkus-rest suit,而不是 RESTEasy Classic、quarkus-resteasy suit,以避免运行时失败。
要应用此更改,请手动执行本发行注记中介绍的其他步骤。迁移应用程序到红帽构建的 Quarkus 3.27 指南中的自动更新流程不包括此更改。
如需更多信息,请参阅 Quarkus 迁移指南 3.22。
1.4.8.3. REST:JsonView 反序列化行为已更改 复制链接链接已复制到粘贴板!
在当前发行版本中,Quarkus REST 将 @JsonView 一致应用到 serialization 和 deserialization。
现在,@JsonView 资源方法或 DTOs 从输入中读取哪些属性,并根据指定的视图类(如 Views.Public 和 Views.Private)写入输出。
在以前的版本中,只有遵循 @JsonView 的序列化,因此 deserialization 可能在活动视图外接受属性。依赖于该行为的应用程序可能需要代码或配置更改才能与新行为保持一致。
要应用此更改,请手动执行本发行注记中介绍的其他步骤。迁移应用程序到红帽构建的 Quarkus 3.27 指南中的自动更新流程不包括此更改。
如需更多信息,请参阅 Quarkus 迁移指南 3.21。