将应用程序迁移到红帽构建的 Quarkus 3.27


Red Hat build of Quarkus 3.27

Red Hat Customer Content Services

摘要

本指南论述了如何将应用程序从早期版本的红帽构建的 Quarkus 迁移到当前版本。

作为应用程序开发人员,您可以使用 quarkus CLI 或 Maven 将基于红帽构建的 Quarkus 版本 3.2 或更高版本的应用程序迁移到 3.27 版本。

重要

Quarkus CLI 主要用于开发目的,包括创建、更新和构建 Quarkus 项目等任务。但是,红帽不支持在生产环境中使用 Quarkus CLI。

要将 Red Hat build of Quarkus 项目更新至最新版本,请按照以下步骤操作,具体在本指南的后续部分中详细介绍:

  1. 使用 quarkus CLI 或 Maven 命令运行自动更新任务。
  2. 请参阅 影响与早期版本部分兼容性的更改,以执行任何手动更新任务。

1.1.1. 自动更新

运行 quarkus CLI 或 Maven 命令会触发升级项目依赖项和源代码的 OpenRewrite 方法。这种自动化方法提供了一种便捷且可靠的方法来更新您的项目。

但是,并非所有迁移任务都是自动化的。如果在运行 quarkus update 命令或其 Maven 等效后没有应用特定的更新,请考虑以下可能的原因:

  • 可用的 OpenRewrite 方法不涵盖所需的迁移任务。
  • 项目所依赖的扩展与最新红帽构建的 Quarkus 版本不兼容。

1.1.2. 手动更新

手动更新可让您灵活地和控制来解决任何迁移任务,以确保您的项目与您的特定需求保持一致。未自动的任务必须手动处理。

有关从上一版本升级到此迁移任务所需的迁移任务列表,请参阅本指南中 与早期版本兼容部分的更改

查看应用程序项目当前版本和您要升级到的版本之间的每个发行版本的迁移指南非常重要。此审核过程可确保您完全了解并准备好更新过程。例如,如果从 3.20 升级到 3.27,您只需要查看本指南。如果要从 3.2 版本升级到 3.27,还必须查看每个中间版本的指南:

此迁移指南中的每个任务都概述了所需的更改,并指示它们是否由 quarkus update 命令及其 Maven 自动处理。

如需了解更多背景,请参阅 Quarkus 社区 迁移指南

1.2. 使用 quarkus CLI 更新项目

使用 quarkus CLI 更新 Red Hat build of Quarkus 项目。

重要

Quarkus CLI 主要用于开发目的,包括创建、更新和构建 Quarkus 项目等任务。但是,红帽不支持在生产环境中使用 Quarkus CLI。

先决条件

流程

  1. 在版本控制系统中为项目创建工作分支。
  2. 按照 安装指南,安装最新版本的 quarkus CLI。
  3. 运行以下命令来验证安装。

    quarkus -v
    3.27.0
    Copy to Clipboard Toggle word wrap
  4. 重要: 配置扩展 registry 客户端,按照 "Geting Started with Red Hat build of Quarkus" 指南中的配置红帽构建的 Quarkus 扩展 registry 客户端 部分。
  5. 在终端中,前往您的项目目录。
  6. 更新项目:

    quarkus update
    Copy to Clipboard Toggle word wrap

    可选: 要更新到特定流,请使用 the- stream 选项,后跟一个特定版本;例如:

    quarkus update --stream=3.27
    Copy to Clipboard Toggle word wrap
  7. 查看 update 命令的输出信息并执行任何推荐的任务。
  8. 使用 diff 工具检查更新过程中所做的所有更改。
  9. 通过更新项目手动执行任何未处理的更改。详情请查看以下 影响与早期版本兼容的更改
  10. 在部署到生产环境前,确保项目构建时无错误、所有测试通过和应用功能。

1.3. 使用 Maven 更新项目

使用 Maven 更新红帽构建的 Quarkus 项目。

先决条件

流程

  1. 在版本控制系统中为项目创建工作分支。
  2. 重要 :配置扩展 registry 客户端,如 "Geting Started with Red Hat build of Quarkus" 指南中的 Configuring Red Hat build of Quarkus client 部分所述。
  3. 打开一个终端,再前往您的项目目录。
  4. 确保红帽构建的 Quarkus Maven 插件版本与最新支持的版本一致。根据 Red Hat build of Quarkus 指南开始 配置项目,然后运行:

    mvn com.redhat.quarkus.platform:quarkus-maven-plugin:3.27.0.redhat-00001:update
    Copy to Clipboard Toggle word wrap

    可选: 要更新到特定流,请使用 the -Dstream 选项,后跟所需的版本;例如:

    mvn com.redhat.quarkus.platform:quarkus-maven-plugin:3.27.0.redhat-00001:update -Dstream=3.27
    Copy to Clipboard Toggle word wrap
  5. 查看 update 命令的输出以了解任何说明并执行推荐的任务。
  6. 使用 diff 工具检查更新过程中所做的所有更改。
  7. 通过更新项目手动执行任何未处理的更改。详情请查看以下 影响与早期版本兼容的更改
  8. 在部署到生产环境前,确保项目构建时无错误、所有测试通过和应用功能。

1.4. 影响与早期版本兼容的更改

本节论述了红帽构建的 Quarkus 3.27 中的更改,它们会影响使用早期产品版本构建的应用程序的兼容性。

查看这些有问题的更改,并采取必要的步骤来确保应用程序在将其更新至红帽构建的 Quarkus 3.27 后继续正常工作。

您可以通过运行 quarkus update 或等同的 Maven 命令来执行本节中列出的许多更新。这会触发将项目依赖项和源代码更新至最新红帽构建的 Quarkus 版本的自动化 OpenRewrite 方法。

但是,并非所有迁移任务都是自动化的。如果自动更新没有应用特定的更新,这可能是因为可用的 OpenRewrite 方法未涵盖所需的迁移任务,或者您的项目依赖的扩展与最新版本不兼容。在这种情况下,您需要手动执行更新。务必查看以下项目以识别和解决任何手动迁移任务。

1.4.1. 兼容性

在当前发行版本中,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 指南中的自动更新流程不包括此更改。

如需更多信息,请参阅以下资源:

在当前发行版本中,功能切换配置使用 .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

在当前发行版中,无论构建模式如何,都必须生成 JsonRPCProvidersBuildItem

在以前的版本中,大多数扩展只以 dev 模式生成此构建项目,方法是使用 @BuildStep (onlyIf = IsDevelopment.class)

现在,构建过程在构建时需要此项目,以便在 JSON-RPC 类上启用执行模型验证。

构建过程使用此项目来标识 JSON-RPC 端点,特别是使用注解的类,如 @Blocking@NonBlocking@RunOnVirtualThread

  • 要迁移,请按如下所示替换条件构建步骤:

    • 之前使用的代码:

      @BuildStep(onlyIf = IsDevelopment.class)
      JsonRPCProvidersBuildItem createJsonRPCService() {
          return new JsonRPCProvidersBuildItem(...);
      }
      Copy to Clipboard Toggle word wrap
    • 更新的代码:

      @BuildStep
      JsonRPCProvidersBuildItem createJsonRPCService() {
          return new JsonRPCProvidersBuildItem(...);
      }
      Copy to Clipboard Toggle word wrap

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.propertiesapplication.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
Copy to Clipboard Toggle word wrap

要应用此更改,请手动执行本发行注记中介绍的其他步骤。迁移应用程序到红帽构建的 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 配置,并为将来的更改做好准备。

在当前发行版本中,旧的属性保持识别,但已弃用,计划在以后的发行版本中删除。

在升级到当前版本时,请使用新属性。

Expand
旧属性名称新属性名称

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
    • @CascadeCascadeType 已被弃用,并被 JPA equivalents 替代,如 @OneToMany (cascade = …​)

      要应用此更改,请运行 Migrating applications to Red Hat build of Quarkus 3.27 指南中的自动更新过程。

    • 代理自定义已更改。如果您使用 @Proxy,请考虑 @ConcreteProxy,或使用 Session#getReferenceHibernate"unproxy 方法。如需更多信息,请参阅 Hibernate ORM 替换 @Proxy
    • org.hibernate.Metamodel 已被删除,并被 org.hibernate.metamodel.model.domain.JpaMetamodel 取代。
    • UserTypeCompositeType 方法签名不再引用内部或服务提供商接口(SPI)类型。如需更多信息,请参阅 Hibernate ORM UserType 和 CompositeUserType 更改
    • 各种 JDBC 类型已移至内部软件包。要将属性映射到这些类型,请使用 @JdbcTypeCode 而不是 @JdbcType
    • LockOptions 类已弃用;受影响的方法有涉及 LockMode 的替代方案。LockOptions 类的一些已弃用的功能也已被删除。如需更多信息,请参阅 Hibernate ORM LockOptions
    • Session#getLobHelper 方法已弃用。使用 Hibernate"getLobHelper 替代。如需更多信息,请参阅 Hibernate ORM Session#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 上,floatdouble 属性映射到 binary_floatbinary_double,而不是 float (p)realdouble 精度类型。如需更多信息,请参阅 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 组件的上下文和依赖项注入(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

      否则,实施自定义 FormatMapper bean。首先,将格式映射器委派给全局 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 更改

    ReactiveIdentifierGenerator API 已更新,现在扩展了 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.MassIndexingMonitororg.hibernate.search.mapper.pojo.masindexing.MassIndexingMonitor 替代。
  • MassIndexingMonitor SerialaddToTotalCount 方法已弃用,并替换为 Mas IndexingMonitor"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 代理。依赖于删除的协议版本的旧代理可能不兼容。

如需更多信息,请参阅以下资源:

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

Expand
指标名称描述类型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 指南中的自动更新流程不包括此更改。

如需更多信息,请参阅以下资源:

1.4.6. 安全性

在当前发行版本中,已弃用的 blocking HttpAuthenticationMechanism.getCredentialTransport () 方法已被删除。

如果您的应用程序或自定义安全扩展覆盖此方法,您必须更新实施以避免编译错误。

通过实现被动版本替换删除的方法,如下例所示:

Uni<HttpCredentialTransport> getCredentialTransport(RoutingContext context) {
    return Uni.createFrom().item(myHttpCredentialTransport);
}
Copy to Clipboard Toggle word wrap

要应用此更改,请手动执行本发行注记中介绍的其他步骤。迁移应用程序到红帽构建的 Quarkus 3.27 指南中的自动更新流程不包括此更改。

1.4.6.2. TLS Registry 扩展重构

在当前发行版本中,TLS Registry 扩展(quarkus-tls-registry)已被重组,以避免在 runtimespi 模块间分割软件包。

作为这个 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;
Copy to Clipboard Toggle word wrap

此更改与 Quarkus 项目中推荐的架构改进一致,以保持部署和运行时组件之间的更清晰的隔离。

要应用此更改,请手动执行本发行注记中介绍的其他步骤。迁移应用程序到红帽构建的 Quarkus 3.27 指南中的自动更新流程不包括此更改。

1.4.7. 工具

中断更改:删除了使用旧配置类和 -AlegacyConfigRoot=true 注解处理器选项构建扩展的支持。

扩展现在必须使用标有 @ConfigMapping@ConfigRoot 的配置接口。

要应用此更改,请手动执行本发行注记中介绍的其他步骤。迁移应用程序到红帽构建的 Quarkus 3.27 指南中的自动更新流程不包括此更改。

如需更多信息,请参阅以下资源:

在当前发行版本中,Gradle 任务 testNativequarkusIntTest 不再依赖于 测试 任务。

现在,它们分别仅执行原生测试和集成测试,允许独立测试执行阶段。

如果您之前依赖于在运行原生或集成测试时包含单元测试的默认任务依赖项,请更新构建脚本。

要应用此更改,请手动执行本发行注记中介绍的其他步骤。迁移应用程序到红帽构建的 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

在当前发行版本中,使用 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.PublicViews.Private)写入输出。

在以前的版本中,只有遵循 @JsonView 的序列化,因此 deserialization 可能在活动视图外接受属性。依赖于该行为的应用程序可能需要代码或配置更改才能与新行为保持一致。

要应用此更改,请手动执行本发行注记中介绍的其他步骤。迁移应用程序到红帽构建的 Quarkus 3.27 指南中的自动更新流程不包括此更改。

如需更多信息,请参阅 Quarkus 迁移指南 3.21

法律通告

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat