1.4. 影响与早期版本兼容的更改
本节论述了红帽构建的 Quarkus 3.15 中的更改,它们会影响使用较早产品版本构建的应用程序的兼容性。
查看这些有问题的更改,并采取必要的步骤来确保应用程序在将其更新至红帽构建的 Quarkus 3.15 后继续工作。
您可以通过运行 quarkus update
或等同的 Maven 命令来执行本节中列出的许多更新。这会触发将项目依赖项和源代码更新至最新红帽构建的 Quarkus 版本的自动化 OpenRewrite 方法。
但是,并非所有迁移任务都是自动化的。如果自动更新没有应用特定的更新,这可能是因为可用的 OpenRewrite 方法未涵盖所需的迁移任务,或者您的项目依赖的扩展与最新版本不兼容。在这种情况下,您需要手动执行更新。务必查看以下项目以识别和解决任何手动迁移任务。
1.4.1. 兼容性
1.4.1.1. Spring 兼容性层已更新,使其与 Spring Boot 3 保持一致
随着红帽构建的 Quarkus 3.15,quarkus-spring-data-rest-extension
被升级,以便与最新的 Spring Boot 3 API 更新保持一致。
如果您在代码中使用 PagingAndSortingRepository
接口,则此升级可能会引入破坏更改。在以前的版本中,PagingAndSortingRepository
扩展 CrudRepository
,它允许您的自定义存储库继承 CrudRepository
的方法。
要解决与这个更改相关的问题,您必须更新自定义存储库来直接扩展 ListCrudRepository
或 CrudRepository
。此调整可确保持续访问所需的方法,并保持与更新的架构的兼容性。
1.4.2. Core
1.4.2.1. Dev 服务启动检测更改
在 Red Hat build of Quarkus 3.15 中,用来确定 Dev Services 是否启动的方法已更改。
在以前的版本中,要决定是否启动 Dev Services,红帽构建的 Quarkus 会检查是否定义了配置属性而无需扩展它。但是,如果属性扩展到空值,这种方法会导致问题。
现在,红帽构建的 Quarkus 首先检查扩展属性是否为空。当扩展属性结束为空时,这个更改可能会导致 Dev Services 意外启动。当未提供给定属性时,大多数 Dev Services 都会启动,例如 JDBC URL。
由于这个变化,您应该将配置属性调整为包含默认值,确保扩展的属性不为空。
例如,如果您使用 quarkus-test-oidc-server
组件模拟 OpenID Connect (OIDC)服务器,且 application.properties
文件包含:
%test.quarkus.oidc.auth-server-url=${keycloak.url}/realms/quarkus/
将属性值改为:
%test.quarkus.oidc.auth-server-url=${keycloak.url:replaced-by-test-resource}/realms/quarkus/
这样,如果没有定义 keycloak.url
,默认的 replaced-by-test-resource
值可防止属性扩展到空值,从而避免 Dev Services 的意外启动。如果表达式中没有定义变量,则整个表达式将为空。
对于这个特定示例,通过运行 quarkus update
来自动应用此更改。但是,在其他用例中,您可能需要手动应用更改。
1.4.2.2. GraalVM SDK 更新
红帽构建的 Quarkus 3.15 将 GraalVM SDK 依赖项更新为版本 23.1.2,更正早期的超天并确保与最新的 GraalVM 功能兼容。
如果您使用 GraalVM 替换开发扩展,请将 org.graalvm.sdk:graal-sdk
依赖项替换为 org.graalvm.sdk:nativeimage
。nativeimage
工件仅包含替换所需的类,使其更精简。
您可以通过运行 Migrating applications to Red Hat build of Quarkus 3.15 指南中所述的自动更新来应用此更改。
JDK 17 要求:GraalVM SDK 23.1.2 在运行时至少需要 JDK 17。
1.4.2.3. Infinispan 15 组件升级
在 Red Hat build of Quarkus 3.15 中,Infinispan 15 组件已升级到 15.0 版本。
在之前的发行版本中,在 Infinispan 15 集成前,您可以使用以下 .Query.java
代码运行查询:
@Inject RemoteCache<String, Book> booksCache; … QueryFactory queryFactory = Search.getQueryFactory(booksCache); Query query = queryFactory.create("from book_sample.Book"); List<Book> list = query.execute().list();
但是,在这个版本里,此代码不再可以正常工作,因为 RemoteCache
现在是一个 @ApplicationScoped
代理 bean 和 Search.getQueryFactory
引发 ClassCastException
。
要解决这个问题,使用 RemoteCache
API 中的 查询
方法删除间接,如下所示:
@Inject RemoteCache<String, Book> booksCache; … Query<Book> query = booksCache.<Book>query("from book_sample.Book"); List<Book> list = query.execute().list();
您必须手动应用此更改。Migrating applications to Red Hat build of Quarkus 3.15 指南中所述的自动更新不包括它。
1.4.2.4. 打包配置更改
在 Red Hat build of Quarkus 3.15 中,以下与打包相关的属性已被重命名或更改。如果您在配置中使用原始属性,它们仍可以正常工作,但会显示警告。
您可以通过运行 Migrating applications to Red Hat build of Quarkus 3.15 指南中所述的自动更新来应用此更改。
原始名称 | 当前名称 |
---|---|
|
对于 JAR 构建,请使用带有有效 JAR type: |
|
|
|
|
|
|
|
|
|
|
|
注意: 此配置属性通常仅在构建 uber-JARs 时应用。 |
|
|
|
|
|
|
|
|
| 没有替换 ; 现在会忽略这些属性。 |
|
|
|
|
|
|
|
|
|
|
更新任何代码和配置文件,以反映这些更改并在构建过程中停止警告信息。
1.4.2.5. ProfileManager
和 ProfileManager SerialgetActiveProfile
被删除
在 Red Hat build of Quarkus 3.15 中,弃用的 ProfileManager
类和 ProfileManager"getActiveProfile
方法被删除,因为 ProfileManager
无法处理多个配置集。
在这个版本中,需要以下配置更改:
要检索活跃的配置集,请使用 io.quarkus.runtime.configuration.ConfigUtils"getProfiles
API。
您必须手动应用此更改。Migrating applications to Red Hat build of Quarkus 3.15 指南中所述的自动更新不包括它。
1.4.2.6. quarkus-app
目录现在只为 fast-jar 软件包创建
在早期版本中,会发现一个不需要的行为,无论生成的工件类型是什么,都会在构建系统的输出目录中生成 quarkus-app
目录。
在 Red Hat build of Quarkus 3.15 中,构建过程只为 fast-jar
软件包创建 quarkus-app
目录,这是默认的工件类型。如果您为不同的工件类型配置构建,则不会创建 quarkus-app
目录。
1.4.2.7. 扩展开发人员所需的调整
在 Red Hat build of Quarkus 3.15 中,用于生成运行时文件和配置文件的扩展注解处理器已被重新开发,提供了更大的灵活性,但使用新限制:
-
不再允许将旧的
@ConfigRoot
与同一模块中的新@ConfigMapping
方法混合。如果您只使用@ConfigMapping
,则不需要进行任何更改。 对于旧的
@ConfigRoot
,请通过将以下内容添加到maven-compiler-plugin
配置来通知注释处理器:<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <annotationProcessorPaths> <path> <groupId>io.quarkus</groupId> <artifactId>quarkus-extension-processor</artifactId> <version>${quarkus.version}</version> </path> </annotationProcessorPaths> <compilerArgs> <arg>-AlegacyConfigRoot=true</arg> </compilerArgs> </configuration> </plugin>
如果测试类中没有配置注解,此标志可在编译测试类时触发警告。要避免这种情况,请只
为默认编译
执行启用注解处理器:<plugin> <artifactId>maven-compiler-plugin</artifactId> <executions> <execution> <id>default-compile</id> <configuration> <annotationProcessorPaths> <path> <groupId>io.quarkus</groupId> <artifactId>quarkus-extension-processor</artifactId> <version>${quarkus.version}</version> </path> </annotationProcessorPaths> <compilerArgs> <arg>-AlegacyConfigRoot=true</arg> </compilerArgs> </configuration> </execution> </executions> </plugin>
我们鼓励迁移至新的 @ConfigMapping
接口,但计划对旧的 @ConfigRoot
类的支持,以确保顺利迁移。计划稍后宣布弃用计划。
您必须手动应用此更改。Migrating applications to Red Hat build of Quarkus 3.15 指南中所述的自动更新不包括它。
1.4.3. data
1.4.3.1. 启动时验证的数据库版本
在 Red Hat build of Quarkus 3.15 中,Hibernate ORM 扩展会验证它在运行时连接的数据库版本至少与构建时配置的成本至少相同。即使配置依赖于红帽构建的 Quarkus 支持的最低数据库版本,也会进行这个验证。
在这个版本中,旨在提醒应用程序开发人员是否尝试使用 Hibernate ORM 或红帽构建的 Quarkus 不再支持的数据库版本。如果您尝试使用不再支持的数据库版本,红帽构建的 Quarkus 不会启动并抛出异常。
这个更改会影响依赖以下数据库版本的应用程序:
- DB2 早于版本 10.5
- Derby 早于 10.15.2
- 早于版本 19.0 的 Oracle 数据库
- MariaDB 早于版本 10.6
- Microsoft SQL Server 早于版本 13 (2016)
- MySQL 早于版本 8.0
- PostgreSQL 早于版本 12.0
如果您无法将数据库升级到受支持的版本,您仍然可以尝试使用它,虽然某些功能可能无法正常工作。要继续使用较早的、不受支持的数据库版本,请明确设置 db-version
,如有必要,还要设置 dialect
。
您必须手动应用此更改。Migrating applications to Red Hat build of Quarkus 3.15 指南中所述的自动更新不包括它。
如需更多信息,请参阅以下资源:
- Quarkus "使用 Hibernate ORM 和 Jakarta Persistence" 指南中的 支持的数据库 部分
- Hibernate ORM:支持的 dialects
- Hibernate ORM:社区分离
1.4.3.2. dev Services 默认镜像更新
在 Red Hat build of Quarkus 3.15 中,几个 Dev Services 的默认镜像更新至以下版本:
- PostgreSQL 版本 16
- MySQL 版本 8.4
- MongoDB 版本 7.0
- Elasticsearch 版本 8.15
- OpenSearch 版本 2.16
您可以通过运行 Migrating applications to Red Hat build of Quarkus 3.15 指南中所述的自动更新来应用此更改。
要使用这些服务的特定版本或分发,您必须手动覆盖应用程序属性中的默认容器镜像。
如需更多信息,请参阅 Quarkus "Dev Services for Elasticsearch" 指南中的 配置 镜像部分。
1.4.3.3. Hibernate ORM 自动清空
优化
在 Red Hat build of Quarkus 3.15 中,Hibernate Object/Relational Mapping (ORM) auto-flush
功能已被优化。
现在,默认情况下,在运行 Hibernate 查询语言(HQL)、Java Persistence Query Language (JPQL)或原生查询之前,如果数据库检测到这些更改可能会影响查询结果,则 Hibernate ORM 只清除待处理的更改。
在大多数情况下,这种优化将提高应用程序的性能,如更有效地批处理,但可能会出现以下问题:
- 如果您正在运行原生查询,则自动清空要求您在查询上指定相关实体类型。如需更多信息,请参阅 Hibernate ORM 用户指南。
- 如果待处理的更改仅影响查询中使用的外键的目标表,则不会在查询中使用这些目标表,则不会自动清除。
如果要恢复到之前的行为并选择替代的默认值,则会引入 quarkus.hibernate-orm.flush.mode
配置属性。将此属性设置为 always
:quarkus.hibernate-orm.flush.mode=always
。
您必须手动应用此更改。Migrating applications to Red Hat build of Quarkus 3.15 指南中所述的自动更新不包括它。
如需更多信息,请参阅以下资源:
1.4.3.4. Hibernate ORM 升级至版本 6.6
在 Red Hat build of Quarkus 3.15 中,Hibernate ORM 扩展已升级到 Hibernate ORM 6.6,并包括以下有问题的更改:
现在,具有某种形式不正确的配置、映射或查询的应用程序可能会抛出异常。在以前的版本中,它们只会发出警告或故障。例如:
-
当将实体与
@GeneratedValue
标识符或@Version
属性设置为非null 值合并时,无效的创建尝试会失败。在以前的版本中,它会在数据库中创建实体。如需更多信息,请参阅 当行被删除时,请参阅 Merge 版本化的实体。 -
不再允许在同一类型上应用
@MappedSuperclass
和@Embeddable
。如需更多信息,请参阅 注释类类型的 Explicit 验证。
-
当将实体与
-
现在,一些功能会被默认启用,以避免意外行为。例如:使用
@Embeddable
注释子类型,现在默认使用基于 discriminator 的继承。如需更多信息,请参阅链接: 基于 Discriminator 的嵌入式继承。 - 在某些情况下,行为被修改为符合 Java Persistence API (ffff)规格。如需更多信息,请参阅 Standard :jakarta.persistence.criteria.Expression#as (Class)。
如需更多信息,请参阅以下资源:
1.4.3.5. Hibernate Search database schema update for outbox-polling system tables
quarkus-hibernate-search-orm-outbox-polling
扩展依赖于数据库中的系统表,Hibernate ORM 连接,以及红帽构建的 Quarkus 3.15,这些系统表的 schema 可能会改变。
如果使用此扩展,则需要迁移数据库架构。有关如何迁移数据库模式的详情,请参考"Hibernate 搜索迁移"指南中的 Outbox 轮询数据库表 部分。
如果无法更新数据库模式,请应用以下设置来恢复之前的默认值:
对于默认持久性单元,请指定以下内容:
-
quarkus.hibernate-search-orm.coordination.entity-mapping.agent.uuid-type=char
-
quarkus.hibernate-search-orm.coordination.entity-mapping.outbox-event.uuid-type=char
-
对于命名的持久性单元,请指定以下内容:
-
quarkus.hibernate-search-orm.<persistence-unit-name>.coordination.entity-mapping.agent.uuid-type=char
-
quarkus.hibernate-search-orm.<persistence-unit-name>.coordination.entity-mapping.outbox-event.uuid-type=char
-
您必须手动应用此更改。Migrating applications to Red Hat build of Quarkus 3.15 指南中所述的自动更新不包括它。
1.4.3.6. 为 Hibernate ORM、Hibernate Reactive 和 MongoDB 删除了 Panache 注解处理器
在 Red Hat build of Quarkus 3.15 中,io.quarkus:quarkus-panache-common
注解处理器已被删除,因为在使用带有 Panache 的 Hibernate ORM 时,不再需要它用于外部定义的实体,使用 Panache 的 Hibernate Reactive with Panache。
在早期版本中,此注解处理器会在 classpath 中找到时自动运行。如果您在构建工具中覆盖了一组注解处理器,则需要显式添加它。
从注解处理器列表中删除对 io.quarkus:quarkus-panache-common
的所有引用。
您可以通过运行 Migrating applications to Red Hat build of Quarkus 3.15 指南中所述的自动更新来应用此更改。
Maven 用户
从 pom.xml
文件查找并删除 io.quarkus:quarkus-panache-common
注解处理器:
<build> <plugins> <!-- other plugins --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.13.0</version> <!-- Necessary for proper dependency management in annotationProcessorPaths --> <configuration> <annotationProcessorPaths> <path> <groupId>io.quarkus</groupId> <artifactId>quarkus-panache-common</artifactId> </path> </annotationProcessorPaths> </configuration> </plugin> <!-- other plugins --> </plugins> </build>
gradle 用户
对于 Gradle 构建,从 build.gradle
文件查找并删除 io.quarkus:quarkus-panache-common
注解处理器:
dependencies { annotationProcessor "io.quarkus:quarkus-panache-common" }
1.4.4. 消息传递
1.4.4.1. 对 Quarkus Messaging 中同步方法的执行模式的更改
在 Red Hat build of Quarkus 3.15 中,Quarkus Messaging extensions 中 同步方法的 执行模式现在默认为 worker 线程。在早期版本中,这些方法在 Vert.x 事件循环(I/O 线程)上运行。
例如,现在在 worker 线程上默认调用以下处理方法,而不是 Vert.x I/O 线程:
package org.acme; import org.eclipse.microprofile.reactive.messaging.Incoming; import org.eclipse.microprofile.reactive.messaging.Outgoing; @Incoming("source") @Outgoing("sink") public Result process(int payload) { return new Result(payload); }
要恢复到更早的行为,您可以使用 quarkus.messaging.blocking.signatures.execution.mode
配置属性。
可能的值有:
-
Worker
(默认) -
event-loop
(早期行为) -
virtual-thread
您还可以使用 @Blocking
和 @NonBlocking
注解来基于每个方法调整执行模式:
package org.acme; import io.smallrye.common.annotation.NonBlocking; import org.eclipse.microprofile.reactive.messaging.Incoming; @Incoming("source") @NonBlocking public void consume(int payload) { // called on I/O thread }
通过注解方法 @NonBlocking
,您可以确保在 Vert.x 事件循环(I/O 线程)中调用它。
检查您的消息传递方法,以确保它们在所需的执行模式下运行,并根据需要更新您的代码或配置。
您必须手动应用此更改。Migrating applications to Red Hat build of Quarkus 3.15 指南中所述的自动更新不包括它。
1.4.4.2. 小的 Reactive Messaging 扩展被重命名为 Quarkus Messaging
在 Red Hat build of Quarkus 3.15 中,smallRye Reactive Messaging 扩展已被重命名为 quarkus-messaging
sHistoryLimit,以反映它们对被动和阻塞工作负载的支持。
Maven 重新定位过程已被实现。您可以通过运行 Migrating applications to Red Hat build of Quarkus 3.15 指南中所述的自动更新来应用此更改。
将项目中旧扩展名称的所有实例替换为新名称。
重命名的扩展
以下扩展已被重命名为:
旧名称 | 新名称 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
配置 root 也已从 quarkus.smallrye-reactive-messaging.
更新至 quarkus.messaging
。自动回退机制已就位,可恢复到旧的配置属性(如有必要)。
对扩展开发人员的影响
如果您是扩展开发人员,请注意以下与部署相关的工件也被重命名:
旧名称 | 新名称 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
更新您的代码和配置,以反映这些更改。
1.4.5. Observability(可观察性)
1.4.5.1. 所有 quarkus.opentelemetry 2.13
配置属性都被删除
在 Red Hat build of Quarkus 3.15 中,quarkus.opentelemetrySetConfiguration 命名空间下
的所有配置属性都已被删除。
这些属性已弃用,并保持在版本 3.2 和 3.8 中的向后兼容性。由于它们现已在 3.15 中删除,您必须进行以下更改来迁移应用程序:
-
将
quarkus.opentelemetry.
命名空间中的所有属性更新为quarkus.otel.
命名空间,以便它们与 OpenTelemetry Java autoconfigure 约定 一致。 -
将 sampler 属性从
quarkus.opentelemetry.tracer.sampler
更新至quarkus.otel.traces.sampler
。 -
基于父 sampler 属性
quarkus.opentelemetry.tracer.sampler.
已被删除。要将 sampler 标记为基于父对象,请直接在parent-based
quarkus.otel.traces.sampler
属性中指定它,如下所示。
旧值 | 新值 | 新值(基于父值) |
---|---|---|
|
|
|
|
|
|
|
|
|
更新您的代码和配置,以使用这些新属性和值。
您必须手动应用此更改。Migrating applications to Red Hat build of Quarkus 3.15 指南中所述的自动更新不包括它。
1.4.5.2. OpenTelemetry io.opentelemetry.extension.annotations.WithSpan
注解被删除
在 Red Hat build of Quarkus 3.15 中,弃用的注解 io.opentelemetry.extension.annotations.WithSpan
已被删除。更新您的代码,以使用新的 io.opentelemetry.instrumentation.annotations.WithSpan
注解。
检查并更改依赖旧注解的任何配置或代码,以确保与此次更新兼容。
您必须手动应用此更改。Migrating applications to Red Hat build of Quarkus 3.15 指南中所述的自动更新不包括它。
1.4.5.3. OpenTelemetry 用于 HTTP 的新语义约定
在 Red Hat build of Quarkus 3.15 中,OpenTelemetry (OTel) SDK 已升级到版本 1.39.0,并检测到版本 2.5.0。此升级强制使用 OpenTelemetry HTTP 语义约定中定义的新约定稳定性迁移。它还完成删除已弃用的标准。更新依赖于这些约定的任何代码或配置。
另外,quarkus.otel.semconv-stability.opt-in
系统属性已被删除,因为 opting-in 不再被支持。更新依赖于此属性的任何代码或配置。
您必须手动应用此更改。Migrating applications to Red Hat build of Quarkus 3.15 指南中所述的自动更新不包括它。
1.4.5.4. OpenTelemetry REST 客户端范围名称更改
在 Red Hat build of Quarkus 3.15 中,OpenTelemetry (OTel) REST 客户端 span 名称现在包含 HTTP 请求方法和路径,例如 GET /hello
。较早的 REST 客户端范围名称仅包含 HTTP 方法。
更新依赖于 REST 客户端范围名称特定格式的代码或配置。
您必须手动应用此更改。Migrating applications to Red Hat build of Quarkus 3.15 指南中所述的自动更新不包括它。
1.4.5.5. OpenTelemetry (OTel)范围名称由数据库操作更改
在 Red Hat build of Quarkus 3.15 中,由数据库操作生成的 span 名称因我们使用的库中的更新而改变。
例如,在更改之前,用于创建数据库表的旧 span 名称是 DB Query
。现在,在这一变化中,新范围名称为 CREATE TABLE {table_name}
。
这个新的命名规则提供了更描述性和有意义的范围名称,可以准确反映执行的特定数据库操作。
因此,您可能会在可观察性工具中发现由数据库操作生成的 span 的不同名称。
检查和更新依赖于旧范围名称的任何自定义监控配置、警报或仪表板,以适应新的命名规则。
您必须手动应用此更改。Migrating applications to Red Hat build of Quarkus 3.15 指南中所述的自动更新不包括它。
有关数据库范围命名约定和最佳实践的更多信息,请参阅 OpenTelemetry 数据库 Span Semantic Conventions 规格。
1.4.5.6. 小健康配置属性重新定位
在早期版本中,一些配置属性被错误地位于 quarkus.health
配置 root 下。
在 Red Hat build of Quarkus 3.15 中,这些属性已重新定位到 quarkus.smallrye-health
配置 root 以实现一致性:
-
quarkus.health.extensions.enabled
已移到quarkus.smallrye-health.extensions.enabled
-
quarkus.health.openapi.included
已移到quarkus.smallrye-health.openapi.included
在 Red Hat build of Quarkus 3.15 中,带有旧配置 root 的属性已被弃用,计划在以后的发行版本中删除。更新任何代码或配置,以使用新的属性位置。
您必须手动应用此更改。Migrating applications to Red Hat build of Quarkus 3.15 指南中所述的自动更新不包括它。
1.4.6. 安全性
1.4.6.1. 密钥存储和信任存储默认格式已更改
使用红帽构建的 Quarkus 3.15,Java Keystroke (JKS)不再是默认的密钥存储和信任存储格式。
反之,红帽构建的 Quarkus 根据文件扩展名决定格式,如下所示:
-
.pem
、.crt
和.key
文件作为 Privacy Enhanced Mail (PEM)证书和密钥读取 -
.jks
、.keystore
、和.truststore
文件被读取为 JKS 密钥存储和信任存储 -
.p12
、.pkcs12
和.pfx
文件作为 PKCS12 密钥存储和信任存储读取
如果您的文件没有使用其中一个扩展,您必须设置文件格式。
例如,要指定 JKS 格式,请设置以下配置值:
-
quarkus.http.ssl.certificate.key-store-file-type=JKS
-
quarkus.http.ssl.certificate.trust-store-file-type=JKS
要指定 P12 或 PEM 格式,请设置 P12 或 PEM 而不是 JKS。
1.4.6.2. 在注入 UserInfo
时,OpenID Connect (OIDC) UserInfo
收购强制
在 Red Hat build of Quarkus 3.15 中,quarkus.oidc.authentication.user-info-required
属性现在会在 io.quarkus.oidc.UserInfo
注入 REST 端点时自动设置为 true
。这个更改删除了手动配置此属性的需要,因为用户Info 通常会在使用属性时注入。
但是,在更复杂的设置中,如果多个 OIDC 租户安全端点,一些租户不支持 UserInfo
,则这个更改可能会导致租户初始化失败。只有在不支持 UserInfo
的租户仍然配置为获取它时,会出现这种情况,可能会导致该租户保护的请求失败。
为了避免多租户设置中的此类故障,在不支持 UserInfo
的租户中将特定于 租户的 quarkus.oidc.<tenant-id>.authentication.user-info-required
属性设置为 false
。这样可确保只有支持 UserInfo
的租户强制其收购。
您必须手动应用此更改。Migrating applications to Red Hat build of Quarkus 3.15 指南中所述的自动更新不包括它。
1.4.7. 工具
1.4.7.1. JUnit Pioneer 版本不再强制执行
在 Red Hat build of Quarkus 3.15 中,Quarkus BOM 不再强制执行 org.junit-pioneer 的版本:junit-pioneer
依赖项。如果您在项目中使用此依赖项,则必须在构建文件中明确指定其版本。
要避免构建问题,请在 pom.xml
或 build.gradle
文件中定义版本;例如:
pom.xml
<properties> ... <junit-pioneer.version>2.2.0</junit-pioneer.version> ... </properties>
您必须手动应用此更改。Migrating applications to Red Hat build of Quarkus 3.15 指南中所述的自动更新不包括它。
1.4.8. Web
1.4.8.1. Quarkus REST:以编程方式添加 Web 链接
在 Red Hat build of Quarkus 3.15 for Quarkus REST (以前称为 RESTEasy Reactive)中),HAL)打包程序类的签名已被修改为包含集合中元素的类型:
-
HalCollectionWrapper<T>
-
HalEntityWrapper<T>
在每次代码中使用 HAL 打包程序类时,添加适当的 type 参数。
您必须手动应用此更改。Migrating applications to Red Hat build of Quarkus 3.15 指南中所述的自动更新不包括它。
创建 HAL 打包程序的新首选方法
创建 HAL 打包程序类的首选方法已更改。使用 io.quarkus.hal.HalService
bean 提供的帮助程序方法,而不是使用构造器。例如:
@Path("/records") public class RecordsResource { @Inject HalService halService; @GET @Produces({ MediaType.APPLICATION_JSON, RestMediaType.APPLICATION_HAL_JSON }) @RestLink(rel = "list") public HalCollectionWrapper<Record> getAll() { List<Record> list = // ... HalCollectionWrapper<Record> halCollection = halService.toHalCollectionWrapper( list, "collectionName", Record.class); // ... return halCollection; } @GET @Produces({ MediaType.APPLICATION_JSON, RestMediaType.APPLICATION_HAL_JSON }) @Path("/{id}") @RestLink(rel = "self") @InjectRestLinks(RestLinkType.INSTANCE) public HalEntityWrapper<Record> get(@PathParam("id") int id) { Record entity = // ... HalEntityWrapper<Record> halEntity = halService.toHalWrapper(entity); // ... return halEntity; } }
虽然使用构造器创建 HAL 包装器仍可以正常工作,但该方法可能在以后的版本中被弃用。因此,开始使用 HalService
bean 公开的帮助程序方法。
如需更多信息,请参阅"Quarkus REST"指南中的 Web 链接支持 部分。
1.4.8.2. 非 REST 路径上的 Quarkus REST 过滤器
在早期版本中,Quarkus REST (以前称为 RESTEasy Reactive)过滤器也会运行,即使请求的资源不是 REST 资源。在 Red Hat build of Quarkus 3.15 中,该行为已更改。现在,Quarkus REST 过滤器仅在 REST 资源上运行。
Quarkus REST 是一个从底层构建的 Jakarta REST (以前称为 JAX-RS)实现,用于 Quarkus 的通用 Vert.x 层。它是完全被动的,针对构建时间处理进行了优化。
如果您需要过滤器应用到非Quarkus REST 资源,您可以通过为 NotFoundException
添加自定义 ExceptionMapper
来完成此操作,如下例所示:
package io.quarkus.resteasy.reactive.server.test.customproviders; import jakarta.ws.rs.NotFoundException; import jakarta.ws.rs.core.Response; import jakarta.ws.rs.ext.ExceptionMapper; import jakarta.ws.rs.ext.Provider; @Provider public class NotFoundExeptionMapper implements ExceptionMapper<NotFoundException> { @Override public Response toResponse(NotFoundException exception) { return Response.status(404).build(); } }
使用这个 ExceptionMapper
,Quarkus REST 处理 "Not Found" 资源,允许过滤器按预期运行。在以前的版本中,过滤器总是在非 REST 资源上运行,这使得其他扩展很难有效地处理"未找到"场景。
您必须手动应用此更改。Migrating applications to Red Hat build of Quarkus 3.15 指南中所述的自动更新不包括它。
1.4.8.3. Qute REST 集成更新: TemplateInstance
默认阻止
在 Red Hat build of Quarkus 3.15 中,io.quarkus.qute.TemplateInstance
类不再注册为非阻塞类型。因此,如果 Jakarta REST (以前称为 JAX-RS)资源方法返回 TemplateInstance
对象,它现在默认被视为阻止。
要恢复之前的非阻塞行为,请将 @io.smallrye.common.annotation.NonBlocking
注解应用到资源方法。
此更改仅影响使用 Quarkus REST (以前为 RESTEasy Reactive)扩展 quarkus-rest
的应用。
您必须手动应用此更改。Migrating applications to Red Hat build of Quarkus 3.15 指南中所述的自动更新不包括它。
1.4.8.4. 重命名为 Quarkus REST 的 RESTEasy Reactive 扩展
在 Red Hat build of Quarkus 3.15 中,RESTEasy Reactive 扩展已重命名为 quarkus-rest
fluentd,以反映它们对被动和阻塞工作负载的支持。
Maven 重新定位过程已被实现。您可以通过运行 Migrating applications to Red Hat build of Quarkus 3.15 指南中所述的自动更新来应用此更改。
将项目中旧扩展名称的所有实例替换为新名称。
大多数新扩展名称遵循以下命名约定:
-
以
-rest
结尾的扩展使用 Quarkus REST (以前为 RESTEasy Reactive)。 -
以 RESTEasy 结尾的
扩展
使用 RESTEasy 经典。
重命名的扩展
以下扩展已被重命名为:
旧名称 | 新名称 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
配置根也已更新:
旧配置 root | 新配置 root |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
自动回退机制已就位,可恢复到旧的配置属性。
对扩展开发人员的影响
如果您是扩展开发人员,请注意以下与部署相关的工件也被重命名:
旧名称 | 新名称 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1.4.8.5. WebJar Locator 扩展重命名为 Web-dependency-locator
在 Red Hat build of Quarkus 3.15 中,quarkus-webjars-locator
扩展被重命名为 quarkus-web-dependency-locator
,并改进了 mvnpm
(Maven NPM)和 importmaps
。
更新您的代码和配置,以使用新的扩展名称。
您必须手动应用此更改。Migrating applications to Red Hat build of Quarkus 3.15 指南中所述的自动更新不包括它。
如需更多信息,请参阅 Quarkus Web 依赖项 locator 指南。