Red Hat build of Quarkus 3.20 发行注记
向红帽构建的 Quarkus 文档提供反馈 复制链接链接已复制到粘贴板!
要报告错误或改进文档,请登录您的红帽 JIRA 帐户并提交问题。如果您没有红帽 JIRA 帐户,系统会提示您创建一个帐户。
流程
- 单击以下链接 来创建 ticket。
- 在 Summary 中输入有关此问题的简单描述。
- 在描述中提供问题或增强功能的详细描述。请包括有问题的文档 URL。
- 点 Submit 创建问题并将其路由到适当的文档团队。
第 1 章 Red Hat build of Quarkus 3.20 发行注记 复制链接链接已复制到粘贴板!
发行注记提供有关红帽构建的 Quarkus 3.20 的新功能、重要的技术变化、技术预览、错误修复、已知问题和相关公告的信息。
这包括以下显著变化:
另外还提供了与升级和向后兼容性相关的信息,以帮助您从早期版本进行迁移。
1.1. 关于红帽构建的 Quarkus 复制链接链接已复制到粘贴板!
红帽构建的 Quarkus 是针对容器和 Red Hat OpenShift Container Platform 优化的 Kubernetes 原生 Java 堆栈。Quarkus 设计为使用流行的 Java 标准、框架和库,如 Eclipse MicroProfile、Eclipse Vert.x、Apache Camel、Apache Kafka、使用 Jakarta Persistence 和 Jakarta REST 的 Hibernate ORM。
作为开发人员,您可以选择 Java 应用程序所需的 Java 框架,您可以在 Java 虚拟机(JVM)模式下运行,或者以原生模式编译和运行。Quarkus 提供了构建 Java 应用程序的容器优先方法。容器先行方法促进了微服务和功能的容器化和高效执行。因此,Quarkus 应用程序的内存占用空间越小,启动时间也更快。
Quarkus 还通过统一配置、自动置备未配置服务、实时编码和持续测试等功能优化应用程序开发流程,从而为您提供对代码更改的即时反馈。
1.2. Quarkus 社区版本与红帽构建的 Quarkus 之间的区别 复制链接链接已复制到粘贴板!
作为应用程序开发人员,您可以访问两个不同的 Quarkus 版本: Quarkus 社区版本和产品化版本,红帽构建的 Quarkus。
下表描述了 Quarkus 社区版本与红帽构建的 Quarkus 之间的区别。
| 功能 | Quarkus 社区版本 | Red Hat build of Quarkus 版本 | 描述 |
|---|---|---|---|
| 访问最新的社区功能 | 是 | 否 | 使用 Quarkus 社区版本,您可以访问最新的功能开发。 红帽不会发布红帽构建的 Quarkus,以与社区版本的每个版本对应。红帽构建的 Quarkus 功能发布节奏大约每六个月进行一次。 |
| 来自红帽的企业级支持 | 否 | 是 | 红帽只为红帽构建的 Quarkus 提供企业级支持。要报告 Quarkus 社区版本的问题,请参阅 quarkusio/quarkus - issues。 |
| 访问长期支持 | 否 | 是 | 红帽构建的 Quarkus 主发行版本的生命周期分为两个支持阶段:全面支持和维护支持。 有关红帽构建的 Quarkus 的产品生命周期、时间表和支持策略的详情,请登录红帽客户门户网站,查看 产品生命周期和红帽构建的 Quarkus 生命周期和支持策略 知识库文章。https://access.redhat.com/product-life-cycles?product=Red%20Hat%20build%20of%20Quarkus |
| 常见的漏洞和风险(CVE)修复和程序错误修复被后向移植到早期版本 | 否 | 是 | 在 Red Hat build of Quarkus 中,所选 CVE 修复和程序错误修复会定期向后移植到支持的流。 有关维护支持的更多信息,请参阅 红帽构建的 Quarkus 生命周期和支持策略。 |
| 使用 Red Hat OpenShift Container Platform 和 Red Hat Enterprise Linux (RHEL)测试和验证 | 否 | 是 | 红帽构建的 Quarkus 使用 Red Hat OpenShift Container Platform 和 RHEL 构建、测试和验证。红帽根据您的订阅协议为支持的配置和经过测试的集成提供生产和开发支持。如需更多信息,请参阅 红帽构建的 Quarkus 支持的配置。 |
| 使用安全构建系统从源构建 | 否 | 是 | 在 Red Hat build of Quarkus 中,红帽使用安全软件交付提供核心平台和所有支持的扩展,这意味着它们从源构建,扫描安全问题,以及验证许可证的使用。 |
| 访问 JDK 和 Red Hat build of Quarkus Native builder 发行版的支持 | 否 | 是 | 红帽构建的 Quarkus 支持经过认证的 OpenJDK 构建和认证的本地可执行文件构建器。请参阅以下接受。如需更多信息,请参阅 红帽构建的 Quarkus 支持的配置。 |
要构建原生 Linux 可执行文件,红帽构建的 Quarkus 支持使用 红帽构建的 Quarkus 原生构建器镜像(quarkus/mandrel-for-jdk-21-21-rhel8),它基于 GraalVM Mandrel。
红帽构建的 Quarkus 不支持使用 Oracle GraalVM 社区版本(CE)、Mandrel 社区版本或任何其他 GraalVM 发行版构建原生可执行文件。如需更多信息,请参阅将 红帽构建的 Quarkus 应用程序编译到原生可执行文件。
1.3. 新功能、功能增强和技术变化 复制链接链接已复制到粘贴板!
本节概述红帽构建的 Quarkus 3.20 中引入的新功能、增强功能和技术变化。
1.3.1. 云 复制链接链接已复制到粘贴板!
在红帽构建的 Quarkus 3.20 中,以下扩展将 Fabric8 Kubernetes 客户端从版本 6.13 升级到 7.1。
-
quarkus-openshift -
quarkus-openshift-client -
quarkus-kubernetes -
quarkus-kubernetes-client
这个升级对性能、兼容性和测试提供了一些改进。
Fabric8 Kubernetes Client 7.1 的一些主要优点:
- 支持 Kubernetes API v1.32 以获得更好的兼容性。
- 使用 Vert.x 而不是 OkHttp 来提高性能。
- 添加了用于更轻松地生成自定义资源定义(CRD)的新工具。
-
使用基于 Vert.x 的
MockWebServer来更好地测试。
这个更改引入了破坏更改。详情请查看 本发行版本部分的"更改会影响较早版本"部分的"更改"中的备注。
Red Hat build of Quarkus 3.20 为 quarkus-kubernetes 扩展提供了开发者预览支持,目前不支持 quarkus-kubernetes-client 扩展。但是,如果您使用这些扩展,则上述更改可能会影响您的迁移。
这个更改需要手动干预。它不包括在 将应用程序迁移到红帽构建的 Quarkus 3.20 指南中的自动更新过程中。
1.3.2. Core 复制链接链接已复制到粘贴板!
1.3.2.1. 构建器和运行时基础镜像升级到 UBI 9 复制链接链接已复制到粘贴板!
从红帽构建的 Quarkus 3.20 开始,红帽构建器和运行时基础镜像默认使用 Red Hat Universal Base Image 9 (UBI 9)。
以下镜像已升级:
| 镜像 | UBI 8 版本 | UBI 9 版本 |
|---|---|---|
| 基础镜像 |
|
|
| 最小镜像 |
|
|
| 运行时镜像 |
|
|
| 构建器镜像(Mandrel) |
|
|
此升级引入了破坏更改。构建器和运行时基础镜像升级到 UBI 9。
要手动升级到 UBI 9 镜像,下表概述了您的选项:
| 镜像 | Actions |
|---|---|
| 构建器镜像 | 不需要操作。在红帽构建的 Quarkus 中自动升级构建器镜像。但是,您也可以手动指定构建器镜像,如下所示:
|
| 运行时镜像 | 根据模式,应用以下设置:
|
在 Red Hat build of Quarkus 原生模式中,如果您使用 in-container 构建来生成原生可执行文件,则必须使用 Mandrel 构建器镜像。在 Red Hat build of Quarkus 3.20 中,这个 Mandrel 构建器镜像仍然基于 UBI 8,但 UBI 8 上生成的原生可执行文件仍可在 UBI 9 上运行。
创建原生可执行文件时,您可以将其复制到容器镜像中,后者需要运行时镜像作为基础镜像。首选运行时镜像是基于 UBI 9 的运行时镜像: registry.access.redhat.com/ubi9-minimal:9.5。
如果您在基于 UBI 9 的运行时镜像时遇到问题,您可以手动切换到基于 UBI 8 的镜像。详情请参阅 Builder 和运行时基础镜像升级到 UBI 9。
如需更多信息,请参阅以下资源:
1.3.2.2. dev 模式中的条件扩展依赖项 复制链接链接已复制到粘贴板!
使用红帽构建的 Quarkus 3.20,扩展现在可以声明仅在开发模式(dev 模式)或满足特定条件的情况下激活的条件依赖项,避免在正常和测试模式中不必要的依赖项。
如需更多信息,请参阅 Quarkus "Conditional extension dependencies" 指南中的 Dev mode-only extension dependencies 部分。
1.3.2.3. 改进了默认区域设置配置 复制链接链接已复制到粘贴板!
红帽构建的 Quarkus 3.20 更新区域设置处理,使其与 Mandrel 版本 24.2 及更新版本保持一致。
现在,应用程序在运行时使用一致的默认区域设置,独立于构建系统的区域设置。这个变化提高了跨环境敏感行为的可移植性和可预测性。
这个更改引入了破坏更改。详情请查看 本发行版本部分的"更改会影响较早版本"部分的"更改"中的备注。
这个更改需要手动干预。它不包括在 将应用程序迁移到红帽构建的 Quarkus 3.20 指南中的自动更新过程中。
1.3.3. data 复制链接链接已复制到粘贴板!
1.3.3.1. agroal: Dev UI 中的数据库连接管理增强 复制链接链接已复制到粘贴板!
从红帽构建的 Quarkus 3.20 开始,quarkus-agroal 扩展添加了一个专用的 Agroal - 数据库连接 卡,以及用于监控到 Dev UI 的数据库连接的页面。
如果您的 Quarkus 应用程序包含使用 quarkus-agroal 扩展名的 JDBC 驱动程序扩展,则它会自动包含在应用程序中。
在 Dev UI 中,您可以喜欢(star) Agroal - 数据库连接池 卡。您还可以将 Database 视图 链接从卡拖到 Dev UI 菜单。点 Database 视图 会打开 Agroal - Database connection 池 页面,您可以在其中查看所有活跃的数据源,包括连接 URL。
此功能增强简化了 Dev UI 中的数据库监控和配置,改进了调试和数据库管理。
1.3.3.2. DataSource :使用 ArC 启动期间数据源验证 复制链接链接已复制到粘贴板!
在红帽构建的 Quarkus 3.20 中,quarkus-datasource 扩展现在在应用程序启动期间使用 ArC 优化的依赖项注入框架验证数据源配置。此功能增强可确保早期检测到错误配置,防止运行时失败并降低流量路由到有故障实例的风险。
红帽构建的 Quarkus 的主要变化:
- 如果数据源注入应用程序 Bean,应用程序会在启动时验证其配置。数据源配置(如这些缺少的必要属性)早期失败,而不是在第一次访问时出现错误。
-
标记为 inactive (
quarkus.datasource.active=false)或缺少所需属性的数据源不会被初始化,确保只有有效的数据源可供应用程序使用。 - 现在,如果所需的数据源不活跃,则 Hibernate ORM 等扩展会失败,从而导致应用程序尝试使用不可用资源。
-
标记为 inactive (
quarkus.datasource.active=false)或缺少必要属性的数据源不包括在健康检查中,确保只有相关数据源贡献诊断。
如需更多信息,请参阅"Configure 数据源"指南中的 Activate 或 deactivate datasources 部分。
1.3.4. 消息传递 复制链接链接已复制到粘贴板!
1.3.4.1. 引入了对 Kafka 事务的支持的消息传递 Kafka 扩展 复制链接链接已复制到粘贴板!
红帽构建的 Quarkus 3.20 引进了 quarkus-messaging-kafka 扩展,它通过 SmallRye Reactive Messaging Kafka 连接器添加了对 Apache Kafka 事务的支持。此功能支持对多个 Kafka 主题和分区的原子写入,确保事务中的所有记录都被提交或无,在事件驱动的应用程序中增强数据一致性。
此功能 作为技术预览功能提供。
如需更多信息,请参阅 Quarkus "Apache Kafka 参考指南" 指南中的 Kafka Transactions 部分。
1.3.5. Observability(可观察性) 复制链接链接已复制到粘贴板!
1.3.5.1. Dev UI:扩展开发人员可以在 Dev UI 页中添加日志标签页 复制链接链接已复制到粘贴板!
从红帽构建的 Quarkus 3.20 开始,扩展开发人员可以在 Dev UI footer 中创建自定义日志标签页,并将日志数据流传输到其中。此过程类似于在 Dev UI 中创建卡或页面。
Log 标签页为应用程序开发人员提供持续的数据,以便在不切换工具的情况下监控应用程序并进行故障排除。与不离开时与后端断开连接的页面不同,日志选项卡将永久保持连接。
如需更多信息,请参阅 Quarkus "Dev UI for extension developers" 指南中的 Add a footer tab 部分。
1.3.5.2. Grafana OTel LGTM 仪表板 复制链接链接已复制到粘贴板!
红帽构建的 Quarkus 3.20 在使用 LGTM Dev Services 时提供多个预先配置的 Grafana 仪表板。这些仪表板视觉化应用程序指标、跟踪和日志。它们将 OpenTelemetry 用于无缝数据收集和演示。有些仪表板以多种方式显示 Micrometer 数据,包括 OpenTelemetry 输出。每个仪表板都针对特定的应用程序设置进行调优。
可用的仪表板有:
- Quarkus Micrometer OpenTelemetry :用于 Micrometer 和 OpenTelemetry 扩展。
- Quarkus Micrometer OTLP Registry :与 Micrometer OTLP registry 扩展一起使用。
- Quarkus Micrometer Prometheus Registry :与 Micrometer Prometheus registry 扩展一起使用。
- Quarkus OpenTelemetry Logging: 显示 OpenTelemetry 扩展中的日志。
由于计算在滑动时间窗内,一些仪表板面板可能需要几分钟时间来显示准确的数据。
在这个版本中,您可以使用 quarkus.otel.traces.suppress-application-uris 配置属性从 OpenTelemetry 中排除特定的 URI。这可让您定义 tracer 应忽略的、以逗号分隔的 URI 模式列表。
例如,设置 quarkus.otel.traces.suppress-application-uris=trace,ping,people* 将关闭对 /trace 和 /ping URI 的追踪,以及以 /people 开始的任何 URI,如 /people/1 或 /people/1/cars。
如果您使用自定义 quarkus.http.root-path,请确保将其包含在配置中。
在 Red Hat build of Quarkus 3.20 中,quarkus-opentelemetry 扩展增加了对 SimpleSpanProcessor 的支持,后者在完成后立即导出 span 和 logs。在无服务器环境和短期应用程序中,这个行为特别有用。
要启用此功能,请将以下配置属性设置为 true :
quarkus.otel.simple=true
quarkus.otel.simple=true
此配置替换了默认的 BatchSpanProcessor,确保跨越和日志会立即发送,而不是被缓冲。这个变化对于 Lambda 功能和其他简短进程至关重要,因为它确保在应用程序关闭前导出遥测数据,从而防止因为批处理延迟导致的数据丢失。
1.3.5.5. OpenTelemetry :引入的日志记录支持 复制链接链接已复制到粘贴板!
在 Red Hat build of Quarkus 3.20 中,quarkus-opentelemetry 扩展现在支持 OpenTelemetry (OTel)日志记录。您可以使用此功能为交互式 Web 应用程序提供分布式日志记录。
要启用此功能,请将以下配置属性设置为 true :
quarkus.otel.logs.enabled=true
quarkus.otel.logs.enabled=true
如需更多信息,请参阅使用 OpenTelemetry Logging 的 Quarkus 指南。
在红帽构建的 Quarkus 3.20 中,quarkus-opentelemetry 扩展为 JVM 和 HTTP 服务器请求指标提供自动检测,并与 MicroProfile Telemetry 2.0 规格保持一致,只要 OpenTelemetry 指标已启用。
OpenTelemetry 指标默认为禁用。要收集 JVM 和 HTTP 服务器请求指标,您必须通过设置 quarkus.otel.metrics.enabled=true 来启用它们。
对应的配置属性会被默认启用,可以通过在配置中设置 quarkus.otel.instrument.jvm-metrics=false 或 quarkus.otel.instrument.http-server-metrics=false 来禁用。
带有 OpenTelemetry Metrics 集成功能的 Fault Tolerance 目前不被支持。
如果您也使用 Micrometer 扩展,您应该禁用 OpenTelemetry 检测以防止潜在的冲突。
另外,如果您通过设置 quarkus.otel.metrics.exporter= 来配置日志记录导出器,您可能在日志中看到 OpenTelemetry 内部追踪相关的指标。logging 日志记录 导出器仅用于调试目的,不建议在生产环境中使用。
1.3.6. 安全性 复制链接链接已复制到粘贴板!
1.3.6.1. 认证:组合身份验证机制的支持 复制链接链接已复制到粘贴板!
红帽构建的 Quarkus 3.20 添加了对在单个请求中使用多个身份验证机制的支持。现在,您可以在同一身份验证流中组合使用 mutual TLS (mTLS)和 OpenID Connect (OIDC) bearer 令牌身份验证等机制。
默认情况下,当第一个 SecurityIdentity 由其中一个注册身份验证机制生成时,身份验证会完成。要要求所有机制来验证凭据,请通过设置配置属性来启用包含的身份验证。
这个功能在组合 mutual TLS 和 bearer 令牌身份验证时很有用,例如在需要访问令牌绑定到客户端证书的情况下。
如需更多信息和示例,请参阅"安全架构" 指南中的组合身份验证机制 部分。
1.3.6.2. Authorization :使用 @PermissionsAllowed创建自定义安全注解 复制链接链接已复制到粘贴板!
Red Hat build of Quarkus 3.20 添加了对在 meta-annotations 中使用 @PermissionsAllowed 的支持,以便您可以创建自定义安全注解以获得更精简的访问控制管理。
此功能增强简化了基于权限的配置,减少重复的安全代码,并提高了可维护性。现在,您可以定义封装 @PermissionsAllowed 的可重复使用的安全注释,使权限处理更高效和一致。
如需更多信息和示例,请参阅"web 端点授权"指南中的 Create permissions meta-annotations 部分。
1.3.6.3. Authorization: 使用 CDI bean 方法定义声明性权限检查器 复制链接链接已复制到粘贴板!
从红帽构建的 Quarkus 3.20 开始,您可以使用 @PermissionChecker 注释在 CDI bean 方法中定义声明性权限检查器。此功能增强通过允许权限检查与资源类单独实施,从而减少代码重复并提高可维护性,从而支持灵活和可重复使用的授权逻辑。
这些权限检查器通过字符串等匹配权限名称来与 @PermissionsAllowed 一同工作。它们通过评估 SecurityIdentity (代表经过身份验证的用户)和传入的 HTTP 请求参数来支持通用的授权检查。这种方法允许精细访问控制。检查器必须在规范或单例 CDI Bean 中定义,并返回 布尔值 或 Uni<Boolean>,支持同步和重新主动授权检查。
此功能通过集中授权逻辑来简化权限管理,从而可以更轻松地在多个端点之间实施安全策略。开发人员可以创建通用权限检查人员,以动态验证多个操作。
如需更多信息,请参阅"web 端点授权"指南中的创建 权限检查器 部分。
1.3.6.4. OIDC: 使用来自文件系统的 JWT bearer 令牌来验证 OIDC 供应商客户端 复制链接链接已复制到粘贴板!
从红帽构建的 Quarkus 3.20 开始,使用 quarkus-oidc 将 OIDC 配置为通过从文件系统中加载 JWT bearer 令牌来验证 OIDC 供应商客户端。
此方法启用安全和自动化身份验证。在容器化环境中(如 OpenShift)特别有用,服务帐户令牌可以挂载为文件。红帽构建的 Quarkus 会自动从文件中加载令牌,并在令牌过期时重新载入令牌。
有关配置详情和使用示例,请查看以下资源:
- "OpenID Connect (OIDC) client and token propagation" 指南中的 JWT Bearer 部分。
- "Example: 如何使用 JWT Bearer 令牌来验证客户端"OpenID Connect ( OIDC)身份验证"指南中的 OIDC 提供程序 客户端身份验证部分。
1.3.6.5. OIDC :过滤自定义处理的 OIDC 响应 复制链接链接已复制到粘贴板!
在红帽构建的 Quarkus 3.20 中,以下 Quarkus 扩展引入了 OpenID Connect (OIDC)响应过滤器。
-
OpenID Connect (
quarkus-oidc) -
OpenID Connect Client (
quarkus-oidc-client)
实施 OidcResponseFilter,以检查响应状态、标头和正文,用于日志记录或其他操作。
默认情况下,OIDC 响应过滤器全局应用。要以特定端点(如令牌端点)为目标,请使用 @OidcEndpoint 注释。
如需更多信息,请参阅"OpenID Connect ( OIDC)身份验证"指南中的 OIDC 响应过滤器 部分。
1.3.6.6. OIDC: mTLS-bound 访问令牌 复制链接链接已复制到粘贴板!
双向 TLS (mTLS)令牌绑定通过确保访问令牌加密绑定到客户端的 mTLS 身份验证证书来提高安全性。
此功能基于 RFC 8705,通过验证用于身份验证的证书指纹是否与令牌中包含的证书指纹匹配,从而最大程度降低接受 stolen bearer 访问令牌的风险。
从红帽构建的 Quarkus 3.20 开始,Quarkus OIDC 扩展 quarkus-oidc 现在支持用于使用 OpenID Connect (OIDC)和 mTLS 保护的端点的证书绑定访问令牌。
要启用此功能,请设置以下配置属性:
quarkus.oidc.token.binding.certificate=true
quarkus.oidc.token.binding.certificate=true
如需更多信息,请参阅"OpenID Connect (OIDC)身份验证"指南中的 Mutual TLS 令牌绑定 部分。
1.3.6.7. OIDC: OidcProviderClient 注入和令牌撤销 复制链接链接已复制到粘贴板!
红帽构建的 Quarkus 3.20 引入了对注入 OidcProviderClient 的支持,允许应用程序与 OpenID Connect (OIDC)供应商的 UserInfo、令牌内省和撤销端点交互。
它使开发人员能够在需要时以编程方式访问 UserInfo、令牌内省和撤销端点。例如,在用户注销后可以撤销访问令牌。
如需更多信息,请参阅 OpenID Connect (OIDC)身份验证指南中的 Token revocation 部分。
1.3.6.8. OIDC :编程创建 OIDC 租户 复制链接链接已复制到粘贴板!
从红帽构建的 Quarkus 3.20 开始,使用 quarkus-oidc 开始,您可以使用 OidcTenantConfig 构建器而不是在 application.properties 文件中配置它们,以编程方式定义 OpenID Connect (OIDC)租户。
这个方法比在配置中定义 OIDC 租户提供了更大的灵活性。
这种方法对于需要静态租户的功能特别有用,如基于签发者和基于路径的租户解析器。
如需更多信息,请参阅"OpenID Connect (OIDC)身份验证"指南中的以下资源:
1.3.6.9. OIDC Client: Keycloak 的 Dev 服务不再需要 OIDC 扩展 复制链接链接已复制到粘贴板!
在 Red Hat build of Quarkus 3.20 中,即使 quarkus-oidc 扩展不存在,Keyc 的 Dev Services 也会启动。这个更改可让您隔离测试 quarkus-oidc-client 扩展,而无需完整的 OIDC 扩展。
另外,Red Hat build of Quarkus 现在会在启用了 Keycloak 的 Dev Services 时自动配置密钥 OIDC Client 属性,包括:
-
quarkus.oidc-client.auth-server-url -
quarkus.oidc-client.client-id -
quarkus.oidc-client.credentials.secret
在以前的版本中,您必须手动设置这些属性。
这些增强是向后兼容的。现有工作流和手动配置继续按预期工作。
1.3.6.10. TLS Registry:已过期或 not-yet-valid 证书的策略配置 复制链接链接已复制到粘贴板!
Red Hat build of Quarkus 3.20 现在支持在证书链的 TLS 握手过程中为处理过期或 not-yet-valid 证书配置策略。
在以前的版本中,信任存储允许此类证书没有警告,遵循 RFC 3280 和相关规格。
在这个版本中,用户可以通过选择以下选项之一来控制行为:
- IGNORE :保留之前的行为,允许过期或未验证证书,而无需警告。
- 警告:检测到此类证书时记录警告(新默认)。
- REJECT :如果存在此类证书,拒绝握手。
1.3.6.11. OIDC:演示支持 Possession 的证明 复制链接链接已复制到粘贴板!
在 Red Hat build of Quarkus 3.20 中,quarkus-oidc 扩展现在支持对访问令牌的演示概念验证(DPoP)。
此功能 作为技术预览功能提供。
如需更多信息,请参阅以下资源:
1.3.6.12. TLS Registry:引入 PEM 密钥存储中的加密 PKCS Serial8 私钥 复制链接链接已复制到粘贴板!
在 Red Hat build of Quarkus 3.20 中,quarkus-tls-registry 扩展引进了对 PEM 密钥存储中加密的 PKCS#8 私钥的支持。
此功能 作为技术预览功能提供。
它使开发人员能够使用 AES-128-CBC 加密保护私钥,从而提高了应用程序安全性。
要使用此功能,请使用密钥存储密码设置 quarkus.tls.key-store.pem.password 属性。
如需更多信息,请参阅使用 TLS Registry 指南管理安全密钥和证书。
1.3.7. 工具 复制链接链接已复制到粘贴板!
1.3.7.1. 为在 Dev 模式下运行的应用程序在扩展元数据中配置 JVM 选项 复制链接链接已复制到粘贴板!
使用红帽构建的 Quarkus 3.20,扩展作者可以为在开发模式下运行的应用程序定义 JVM 选项。它们可以指定这些选项,如 --enable-preview or--add-opens 直接在扩展元数据中,无需由应用程序开发人员配置。
在开发模式下运行时,扩展会自动应用这些 JVM 选项,确保所有应用程序开发人员都提供一致的环境。
应用程序开发人员可以关闭所有扩展提供的 JVM 选项,或使用 Quarkus Maven 插件选择性地关闭特定扩展的选项。如需更多信息,请参阅 Quarkus "Quarkus and Maven" 指南中的 Extension provided Dev mode Java options 部分。
1.3.8. Web 复制链接链接已复制到粘贴板!
1.3.8.1. Dev UI:添加到 Dev UI 的 HTTP 访问日志 复制链接链接已复制到粘贴板!
从红帽构建的 Quarkus 3.20 开始,Dev UI 页包含一个 HTTP 选项卡,您可以使用它来监控传入的 HTTP 访问日志消息,而无需切换工具或上下文。
例如,如果您在 Dev UI 中使用 SmallRye OpenAPI - Swagger UI 页面与应用程序的 HTTP 端点交互,您可以在 Dev UI footer 的 HTTP 标签页中看到对应的日志消息。
如需更多信息,请参阅 Quarkus " HTTP 参考" 指南中的 配置 HTTP 访问日志 部分。
1.3.8.2. REST:作为 REST 参数的 Java 记录 复制链接链接已复制到粘贴板!
红帽构建的 Quarkus 3.20 引入了对 Java 记录的支持,作为 REST 端点参数容器,从而启用了简洁和不可变的数据结构。记录可以封装查询、Cookie、标头、表单或多部分参数,简化了 RESTful 服务中的数据处理。
Java 记录已经可用于 JSON 序列化和 REST bodies 的反序列化。但是,由于 Jakarta REST 规格的限制,@BeanParam 尚不支持它们。
1.3.8.3. REST 和 RESTEasy: @AuthorizationPolicy 注释引入 复制链接链接已复制到粘贴板!
在红帽构建的 Quarkus 3.20 中,quarkus-rest 和 quarkus-resteasy 扩展增加了对新的 @AuthorizationPolicy 注解的支持。您可以使用此注解将指定 HttpSecurityPolicy 直接绑定到 Jakarta REST 端点。此功能提供了路径匹配规则的替代选择,并在不修改 SecurityIdentity 角色的情况下启用更灵活的授权检查。
如需更多信息,请参阅"web 端点授权"指南中的 Custom HttpSecurityPolicy 部分。
1.3.8.4. REST Client: 使用 @Url 注解动态每个invocation URL 复制链接链接已复制到粘贴板!
在红帽构建的 Quarkus 3.20 中,quarkus-rest-client 扩展增加了对 @Url 注释的支持。现在,您可以在 REST 客户端方法中注解参数,以便在运行时动态提供 URL。
通常,REST 客户端需要全局配置的基本 URL。然而,有些情况需要基于每个invocation 来设置 URL。@Url 注释通过为单个调用启用动态 URL 解析来支持这种用例。
如需更多信息,请参阅 Quarkus "使用 REST Client" 指南中的 Dynamic base URL 部分。
1.3.8.5. REST Client:MicroProfile REST 客户端更新至版本 4.0 复制链接链接已复制到粘贴板!
在红帽构建的 Quarkus 3.20 中,quarkus-rest-client 扩展已更新至 MicroProfile REST 客户端 4.0。这个版本通过提供用于创建和管理 REST 客户端的标准化声明 API 增强了应用程序与 RESTful 服务交互的方式。它提高了灵活性、性能和安全性,同时简化外部 REST 服务的集成。
在红帽构建的 Quarkus 3.20 中,quarkus-rest-jackson 扩展通过引入 reflection-free deserialization 来增强其 JSON 处理功能。
此增强补充了自由的序列化功能,它在早期版本中实现。
默认情况下,S reflection-free JSON 处理被禁用。要启用它,请将以下配置属性设置为 true :
quarkus.rest.jackson.optimization.enable-reflection-free-serializers=true
quarkus.rest.jackson.optimization.enable-reflection-free-serializers=true
通过消除反序列化期间反映的依赖,应用程序可以获得更好的性能并降低内存消耗,特别是对于反映可能会引入开销的原生应用程序。如果启用此功能,请运行测试以评估其对应用程序的影响。
如需更多信息,请参阅 Quarkus "Writing REST services with Quarkus REST" 指南中的 JSON serialisation 部分。
1.3.8.7. 引入 Websocket 下一步扩展 复制链接链接已复制到粘贴板!
红帽构建的 Quarkus 3.20 引入了对 quarkus-websockets-next 扩展的支持,它提供了一个现代的声明性 API 来定义 WebSocket 服务器和客户端端点。
此扩展支持高效、可扩展的实时通信,并与红帽构建的 Quarkus 的被动架构和网络层集成。
与已弃用的 quarkus-websockets 扩展不同,WebSockets Next 不会实现 Jakarta WebSocket 规格。
WebSockets Next 引入的主要功能:
改进了安全集成
Websocket 下一步支持与 Quarkus 安全和身份提供程序进行无缝集成。每个 WebSocket 连接都与一个 SecurityIdentity 关联,在 HTTP 升级过程中启用早期授权。开发人员可以使用标准安全注解或权限检查器保护端点。对于支持自定义标头的客户端,不支持 bearer 令牌身份验证。JavaScript 客户端无法设置自定义授权标头,可以使用 Sec-WebSocket-Protocol 标头来传递令牌。另外,当 OIDC 令牌过期时,红帽构建的 Quarkus 会自动关闭 WebSocket 连接。
详情请查看 "WebSockets Next reference" 指南中的 Security 部分。
结构化消息处理
扩展支持内置的 JSON 序列化和反序列化。String,JsonObject,JsonArray,Buffer, 和 byte[] 等常见类型在没有转换的情况下发送。您可以提供一个自定义 codec 来自定义消息如何序列化或反序列化。
如需更多信息,请参阅 Serialization 和 deserialization 部分。
Observability 集成
Websocket Next 与 OpenTelemetry 和 Micrometer 集成,以增强可观察性。如果存在 OpenTelemetry 扩展,它会自动捕获打开和关闭 WebSocket 连接的 trace,并将其链接到初始握手范围。启用 Micrometer 支持时,WebSockets Next 会收集 WebSocket 活动的指标。
有关配置详情,请参阅 WebSockets Next 参考指南的 Telemetry 部分。
如需更多信息,请参阅以下资源:
1.4. 支持和兼容性 复制链接链接已复制到粘贴板!
您可以找到与 Red Hat build of Quarkus 3.20 兼容的支持的配置和工件的详细信息,以及红帽客户门户网站上的高级别支持政策,如下所示:
- 有关支持的配置、OpenJDK 版本和经过测试的集成列表,请参阅 红帽构建的 Quarkus 支持的配置。
- 有关红帽构建的 Quarkus 支持的 Maven 工件、扩展和 BOM 列表,请参阅 红帽构建的 Quarkus 组件详情。
- 有关所有红帽产品的正式发布、完全支持及维护支持日期,请参阅 Red Hat Application Services 产品更新及支持政策。
1.4.1. 产品更新和支持生命周期政策 复制链接链接已复制到粘贴板!
在 Red Hat build of Quarkus 中,功能发行版本可以是主发行版本或次版本:
- 主发行版本引入了新功能及支持生命周期(完整和维护)至少 3 年。
- 次发行版本引入了新功能或更改不会影响与早期版本的兼容性(破坏的变化)。最新的次版本被完全支持,上一版本在维护 6 个月内被考虑,从发布新的次版本开始。
如需更多信息,请参阅 Red Hat 生命周期和支持政策。
红帽构建的 Quarkus 版本号直接与 Quarkus 社区项目的 Long-Term Support (LTS)版本保持一致。如需更多信息,请参阅 Quarkus 的 Long-Term Support (LTS) for Quarkus 博客文章。
红帽构建的 Quarkus 功能发行版本的版本号与它所基于的 Quarkus 社区版本匹配。
红帽不会为每个版本社区发布 Quarkus 的产品化版本。红帽构建的 Quarkus 功能发布节奏约每 6 个月。
在后续版本发布前,红帽构建的 Quarkus 提供了对功能发行版本的完全支持。当一个功能发行版本被一个新版本取代时,红帽将继续为这个版本提供六个月的维护支持,如以下支持生命周期图 [Fig. 1] 所述。
图 1.红帽构建的 Quarkus 的发布节奏和支持生命周期
在发行版本的完全支持阶段和维护支持阶段,红帽还提供 'service-pack (SP)' 更新和 'micro' 发行版本来修复错误和常见漏洞披露(CVE)。
红帽构建的 Quarkus 功能版本中的新功能可引入对底层技术或平台中依赖项的改进、创新和更改。有关连续功能发行版中的新功能或更改的详细概述,请参阅 新功能、增强功能和技术更改。
虽然红帽构建的 Quarkus 的大部分功能在升级到最新版本后继续按预期工作,但在某些情况下,您可能需要更改现有应用程序或对环境或依赖项进行一些额外的配置。因此,在将 Red Hat build of Quarkus 升级到最新版本前,请查阅 影响与之前版本的兼容以及发行注记中 已弃用组件和功能 部分的更改。
有关红帽构建的 Quarkus 的产品生命周期、时间表和支持策略的详细信息,请登录红帽客户门户网站并查看知识库文章,红帽构建的 Quarkus 生命周期和支持策略。
1.4.2. 测试和验证的环境 复制链接链接已复制到粘贴板!
Red Hat build of Quarkus 3.20 在以下 Red Hat OpenShift Container Platform 版本上提供:4.18、4.12 和 Red Hat Enterprise Linux 8.10。
有关支持的配置列表,请登录到红帽客户门户网站,并查看红帽知识库解决方案 Red Hat build of Quarkus 支持的配置。
1.4.3. 开发支持 复制链接链接已复制到粘贴板!
红帽为以下红帽构建 Quarkus 功能、插件、扩展和依赖项提供 开发支持 :
功能
- 持续测试
- Dev 服务
- Dev UI
- 本地开发模式
- 远程开发模式
plugins
- Maven 协议缓冲插件
1.4.3.1. 开发工具 复制链接链接已复制到粘贴板!
红帽为使用 Quarkus 开发工具提供开发支持,包括 Quarkus CLI 和 Maven 和 Gradle 插件,以设计、开发、测试和部署红帽构建的 Quarkus 应用程序。
红帽不支持在生产环境中使用 Quarkus 开发工具。如需更多信息,请参阅红帽知识库文章 开发支持覆盖范围。
1.5. 弃用的组件和功能 复制链接链接已复制到粘贴板!
本节中列出的组件和功能在 Red Hat build of Quarkus 3.20 中弃用。这个版本包括了并支持它们。但是,不会对这些组件和功能进行任何增强,它们可能会在以后被删除。
有关本发行版本中弃用的组件和功能列表,请登录红帽客户门户网站并查看 红帽构建的 Quarkus 组件详情页面。
1.5.1. 旧配置类已弃用 复制链接链接已复制到粘贴板!
在红帽构建的 Quarkus 3.20 中,基于 @ConfigRoot 和 @ConfigItem 的传统配置类已弃用。此弃用准备迁移到 @ConfigMapping 框架,该框架提供了更加一致和类型安全的配置模型。
本发行版本中提供了现有配置类的兼容性层,但计划在以后的版本中删除。
建议开发人员更新其代码,以使用 @ConfigMapping 接口来确保长期兼容性。
如需更多信息,请参阅 JIRA 问题 QDOCS-1150。
1.5.2. quarkus.http.cors 属性已弃用 复制链接链接已复制到粘贴板!
在 Red Hat build of Quarkus 3.20 中,quarkus.http.cors 配置属性已弃用。若要启用 Cross-Origin Resource Sharing (CORS),请改为使用 quarkus.http.cors.enabled 属性。
按如下方式更新您的配置:
quarkus.http.cors.enabled=true
quarkus.http.cors.enabled=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 引进了这个更改来提高与 YAML 配置的兼容性,以前的结构需要使用特殊语法(如
~)为 root 键分配值,从而导致混淆或容易出错的设置。
有关更多信息,请参阅 跨资源共享(CORS)指南。
1.5.3. 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=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
引进了这个更改来提高与 YAML 配置的兼容性,以前的结构需要使用特殊语法(如 ~ )为 root 键分配值,从而导致混淆或容易出错的设置。
如需更多信息,请参阅 迁移指南 3.19。
1.5.4. 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.5.5. 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 指南中的自动更新过程中。
1.6. 技术预览 复制链接链接已复制到粘贴板!
本节列出了红帽构建的 Quarkus 3.20 中现在作为技术预览提供的功能和扩展。
红帽产品服务等级协议(SLA)不支持技术预览功能,且功能可能并不完善,红帽建议您不要在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
1.6.1. 技术预览功能 复制链接链接已复制到粘贴板!
Red Hat build of Quarkus 3.20 引入了以下技术预览功能:
1.6.2. 持续技术预览功能 复制链接链接已复制到粘贴板!
Red Hat build of Quarkus 3.20 继续提供红帽构建的 Quarkus 3.15 中引入的以下技术预览功能:
1.7. 影响与早期版本兼容的更改 复制链接链接已复制到粘贴板!
本节论述了红帽构建的 Quarkus 3.20 中的更改,它们会影响使用早期产品版本构建的应用程序的兼容性。
查看这些有问题的更改,并采取必要的步骤来确保应用程序在将其更新至红帽构建的 Quarkus 3.20 后继续正常工作。
要将应用程序项目更新至红帽构建的 Quarkus 3.20,请参阅 Migrating applications to Red Hat build of Quarkus 3.20 指南。
1.7.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.7.2. 兼容性 复制链接链接已复制到粘贴板!
1.7.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.7.3. Core 复制链接链接已复制到粘贴板!
1.7.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.7.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.7.3.4. 调度程序方法现在需要启动调度程序 复制链接链接已复制到粘贴板!
从红帽构建的 Quarkus 3.20 开始,io.quarkus.scheduler.Scheduler 中的方法行为已更改。
当调度程序没有启动时,几乎所有方法现在都会抛出 UnsupportedOperationException。
要验证调度程序是否正在运行,您可以使用新方法 Scheduler#isStarted ()。
这个更改会影响来自 quarkus-scheduler 和 quarkus-quartz 扩展的调度程序实例。
1.7.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.7.3.6. 迁移到 @ConfigMapping 和弃用配置类 复制链接链接已复制到粘贴板!
在红帽构建的 Quarkus 3.20 中,配置已迁移到 @ConfigMapping 框架。这个更改弃用了旧的配置类,而是基于接口和方法签名的统一配置模型。
对于某些常用的配置类,兼容性层仍存在,但计划在以后的发行版本中删除。
1.7.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.7.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.7.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.7.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.7.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.7.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.7.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=callbackCopy 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=noneCopy to Clipboard Copied! Toggle word wrap Toggle overflow
有关迁移应用程序的这些更改和指南的更多信息,请参阅 迁移指南 3.19 或以下资源:
1.7.5. 日志记录 复制链接链接已复制到粘贴板!
1.7.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=trueCopy to Clipboard Copied! Toggle word wrap Toggle overflow
引进了这个更改来提高与 YAML 配置的兼容性,以前的结构需要使用特殊语法(如 ~ )为 root 键分配值,从而导致混淆或容易出错的设置。
如需更多信息,请参阅 迁移指南 3.19。
1.7.6. Observability(可观察性) 复制链接链接已复制到粘贴板!
1.7.6.1. OpenTelemetry: Database incubating values moved 复制链接链接已复制到粘贴板!
在 Red Hat build of Quarkus 3.20 中,quarkus-opentelemetry 扩展引入了破坏更改,因为一些数据库出现的问题(如与 Redis 相关的值)被移到不同的软件包中。
OpenTelemetry 不维护数据库语义惯例的更改列表,因为它们尚不稳定。
如果您使用手动工具,可能需要手动干预。它不包括在 将应用程序迁移到红帽构建的 Quarkus 3.20 指南中的自动更新过程中。
1.7.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.7.7. 安全性 复制链接链接已复制到粘贴板!
1.7.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.7.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 ()现在是findByCredentialId ()。 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 模块更改
-
WebAuthnHardwareconstructor 现在需要一个URL参数来代表端点位置。您可以使用@TestHTTPResource URL url从测试类获取此 URL。 -
WebAuthnEndpointHelper.invokeRegistration ()现在是getRegistrationChallenge ()。 -
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.7.8. 工具 复制链接链接已复制到粘贴板!
在以前的版本中,红帽构建的 Quarkus 3.15 版本附带 @WithTestResource 版本被缺陷,因此没有宣布。
在 Red Hat build of Quarkus 3.20 中,这个问题已解决。在本发行版本中,早期 restrictToAnnotatedClass 字段已被 scope 替代。
1.7.8.2. JUnit 5 Mockito :默认模拟策略更改为 inline 复制链接链接已复制到粘贴板!
在早期版本中,quarkus-junit5-mockito 依赖项被配置为使用 子类 模拟策略来创建模拟对象。
从红帽构建的 Quarkus 3.20 开始,依赖项现在被配置为默认 使用内联 模拟策略。
1.7.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.7.9. web 复制链接链接已复制到粘贴板!
如果启用了 HTTP 压缩,quarkus.http.compress-media-types 配置属性定义要压缩的介质类型列表。在 Red Hat build of Quarkus 3.20 中,此属性的默认值已更改。新压缩的介质类型现在包含 application/json 和 application/xhtml+xml。
1.7.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.7.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.7.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.7.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 指南中的自动更新过程中。
1.8. 已知问题 复制链接链接已复制到粘贴板!
查看以下已知问题以了解红帽构建的 Quarkus 3.20 限制和临时解决方案。
1.8.1. FIPS:在启用了 FIPS 的环境中测试时的已知问题 复制链接链接已复制到粘贴板!
在 Red Hat build of Quarkus 3.20 中,进行了测试,以评估 Quarkus 应用程序在启用了 FIPS (Federal Information Processing Standards)模式的环境中的行为。
测试通常成功完成时,一些技术集成和原生镜像配置目前存在阻止验证或编译的限制。
在启用了 FIPS 的环境中测试显示几个关键组件的成功结果,包括 OpenID Connect (OIDC)、支持的数据库、缓存、在非原生模式和 OpenTelemetry 中与 Kafka 的消息。但是,目前无法在这些环境中验证一些技术集成和原生配置。
这些发现结果并不表示红帽构建的 Quarkus 或其组件对 FIPS 的官方支持。
无法验证的场景
以下技术集成或配置目前在启用了 FIPS 的环境中无法验证:
- MariaDB 11.x
- 在 JVM 和原生模式下使用 Mandrel 23.0 和 23.1 的 Infinispan 客户端扩展
- 在原生模式中使用 SCRAM 和 OAUTHBEARER SASL 机制的 Apache Kafka
- 原生模式中的 JDBC MSSQL 驱动程序
- DB2
- 原生模式的 reactive MSSQL 客户端
- 使用 Red Hat Mandrel 23.1 构建器镜像的原生镜像编译
重要的相关问题
以下公共 JIRA 票据提供了遇到的限制的更多详情:
- QUARKUS-5984 :由于兼容性问题,MariaDB 11.x 无法在启用了 FIPS 的环境中连接。
- QUARKUS-2036: Infinispan 客户端扩展缺少对启用了 FIPS 的环境的支持。
- QUARKUS-2984 :使用 JDBC MSSQL 和 Reactive MSSQL 客户端的本地构建在启用了 FIPS 的 RHEL 8 上会失败。
- QUARKUS-5232: SASL SCRAM 机制在启用了 FIPS 的环境中的原生模式下不可用。
- QUARKUS-5233: SASL OAUTHBEARER 机制在启用了 FIPS 的环境中的原生模式下不可用。
- MANDREL-254: Mandrel 23.1 构建器镜像需要重新工作以支持启用了 FIPS 的环境。
- QUARKUS-4387: Quarkus Reactive MySQL 客户端在启用了 FIPS 的环境中不被支持。
- QUARKUS-4612 :在带有原生 Mandrel 23.0 和 23.1 的 FIPS 上 Infinispan 客户端扩展会失败。
临时解决方案
当前还没有可用的临时解决方案。
此发行注记旨在在更广泛的兼容性测试时抢占披露已知挑战。
1.8.2. Kafka Streams 扩展在 Microsoft Windows 上缺少原生库 复制链接链接已复制到粘贴板!
由于缺少原生库 librocksdbjni-win64.dll,在 Microsoft 上使用 quarkus-kafka-streams 扩展的应用程序会在运行时会失败。
在启动过程中,这个问题会抛出以下错误:
java.lang.RuntimeException: librocksdbjni-win64.dll was not found inside JAR
java.lang.RuntimeException: librocksdbjni-win64.dll was not found inside JAR
这个错误可防止初始化 RocksDB 组件,这是 Kafka Streams 应用程序所需的。
目前还没有可用的临时解决方案。
错误示例
如需更多信息,请参阅 QUARKUS-3434。
1.8.3. 在 Windows 上缺少 Snappy 的原生库 复制链接链接已复制到粘贴板!
在 Red Hat build of Quarkus 3.20 中,在 Windows 上运行使用 Snappy 压缩库的应用程序会因为缺少原生库而产生错误。
当尝试压缩 Windows 环境中带有 Snappy 的数据时,用户可能会遇到类似以下示例的错误消息。
错误信息示例
... org.eclipse.microprofile.reactive.messaging.Message$5@1e8dc267 from channel 'test' was not sent to Kafka topic 'test' - nacking message: org.apache.kafka.common.KafkaException: org.xerial.snappy.SnappyError: [FAILED_TO_LOAD_NATIVE_LIBRARY] no native library is found for os.name=Windows and os.arch=x86_64 ...
...
org.eclipse.microprofile.reactive.messaging.Message$5@1e8dc267 from channel 'test' was not sent to Kafka topic 'test' - nacking message: org.apache.kafka.common.KafkaException: org.xerial.snappy.SnappyError: [FAILED_TO_LOAD_NATIVE_LIBRARY] no native library is found for os.name=Windows and os.arch=x86_64
...
临时解决方案:目前还没有可用的临时解决方案。计划在以后的发行版本中解决这个问题。
如需更多信息,请参阅 QUARKUS-5983。
1.8.4. 原生镜像构建会间歇性失败,在 Mandrel 23.1 上无法访问类型错误 复制链接链接已复制到粘贴板!
在 Red Hat build of Quarkus 3.20 中,使用 Mandrel 23.1 运行时构建原生镜像可能会因为堆快照验证错误而失败。
构建过程失败并显示一个错误,表示类型没有标记为 reachable :
AnalysisType<... reachable: false>
AnalysisType<... reachable: false>
这些错误不一致,并可能在不同应用程序中发生。在受控的环境中,它们尚未可靠复制。
错误 1 示例
com.oracle.graal.pointsto.util.AnalysisError: The heap snapshot verifier discovered a type not marked as reachable: AnalysisType<VMOption$Origin[] -> HotSpotType<[Lcom/sun/management/VMOption$Origin;, resolved>, allocated: false, inHeap: false, reachable: false> at com.oracle.graal.pointsto.heap.HeapSnapshotVerifier$ScanningObserver.ensureTypeScanned(HeapSnapshotVerifier.java:332) ...
com.oracle.graal.pointsto.util.AnalysisError: The heap snapshot verifier discovered a type not marked as reachable:
AnalysisType<VMOption$Origin[] -> HotSpotType<[Lcom/sun/management/VMOption$Origin;, resolved>, allocated: false, inHeap: false, reachable: false>
at com.oracle.graal.pointsto.heap.HeapSnapshotVerifier$ScanningObserver.ensureTypeScanned(HeapSnapshotVerifier.java:332)
...
错误 2 示例
AnalysisType<MemoryType[] -> HotSpotType<[Ljava/lang/management/MemoryType;, resolved>, allocated: false, inHeap: false, reachable: false> AnalysisType<HotSpotDiagnosticMXBean$ThreadDumpFormat[] -> HotSpotType<[Lcom/sun/management/HotSpotDiagnosticMXBean$ThreadDumpFormat;, resolved>, allocated: false, inHeap: false, reachable: false>
AnalysisType<MemoryType[] -> HotSpotType<[Ljava/lang/management/MemoryType;, resolved>, allocated: false, inHeap: false, reachable: false>
AnalysisType<HotSpotDiagnosticMXBean$ThreadDumpFormat[] -> HotSpotType<[Lcom/sun/management/HotSpotDiagnosticMXBean$ThreadDumpFormat;, resolved>, allocated: false, inHeap: false, reachable: false>
错误 3 示例
AnalysisType<MemoryType[] -> HotSpotType<[Ljava/lang/management/MemoryType;, resolved>, allocated: false, inHeap: false, reachable: false>
AnalysisType<MemoryType[] -> HotSpotType<[Ljava/lang/management/MemoryType;, resolved>, allocated: false, inHeap: false, reachable: false>
临时解决方案:重试原生镜像构建。由于问题是间歇性的,因此构建可能会在后续尝试时成功。
计划在以后的发行版本中解决这个问题。
如需更多信息,请参阅 MANDREL-332。
1.8.5. OpenTelemetry :当禁用追踪并启用指标时,Dev 模式将无法重新载入 复制链接链接已复制到粘贴板!
在 Red Hat build of Quarkus 3.20 中,如果 application.properties 文件中设置了以下属性,则使用 quarkus-opentelemetry 扩展的应用程序不会在 Dev 模式中重启:
-
quarkus.otel.traces.enabled=false -
quarkus.otel.metrics.enabled=true
在重新载入尝试过程中,Quarkus 会抛出 UnsatisfiedResolutionException :
错误信息示例
jakarta.enterprise.inject.UnsatisfiedResolutionException: No bean found for required type [class io.quarkus.opentelemetry.runtime.tracing.DelayedAttributes] and qualifiers [[@jakarta.enterprise.inject.Any()]]
jakarta.enterprise.inject.UnsatisfiedResolutionException: No bean found for required type [class io.quarkus.opentelemetry.runtime.tracing.DelayedAttributes] and qualifiers [[@jakarta.enterprise.inject.Any()]]
临时解决方案
目前还没有可用的临时解决方案。计划在以后的发行版本中解决这个问题。
1.8.6. Quarkus CLI 无法发现 TLS registry CLI 插件 复制链接链接已复制到粘贴板!
红帽构建的 Quarkus 3.15 引入了 quarkus-tls-registry-cli 插件,该插件为 Quarkus CLI 启用 TLS registry 支持。
但是,开发工具目前不会发现托管在 maven.repository.redhat.com 上的 Quarkus CLI 插件。因此,Quarkus CLI 无法默认解析 TLS registry CLI 插件。
当出现这个问题时,CLI 会返回类似以下输出的错误:
[jbang] [ERROR] Could not resolve dependencies: The following artifacts could not be resolved: io.quarkus:quarkus-tls-registry-cli:jar:3.20.2.SP1-redhat-00003 (absent): Could not find artifact io.quarkus:quarkus-tls-registry-cli:jar:3.20.2.SP1-redhat-00003 in central (https://repo1.maven.org/maven2/)
[jbang] [ERROR] Could not resolve dependencies: The following artifacts could not be resolved: io.quarkus:quarkus-tls-registry-cli:jar:3.20.2.SP1-redhat-00003 (absent): Could not find artifact io.quarkus:quarkus-tls-registry-cli:jar:3.20.2.SP1-redhat-00003 in central (https://repo1.maven.org/maven2/)
临时解决方案: 要启用 Quarkus CLI 解析插件,请将 JBang 配置为使用位于 https://maven.repository.redhat.com/ga/ 的 Red Hat Maven 存储库。
您可以使用以下方法之一:
使用以下内容创建
jbang.properties文件:run.repos=central,https://maven.repository.redhat.com/ga/
run.repos=central,https://maven.repository.redhat.com/ga/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要在本地应用此配置,请将该文件放在项目的根目录中。要全局应用配置,请将该文件放在
~/.jbang目录中。如果已安装 JBang,请运行以下命令在全局范围内配置存储库:
jbang config set run.repos central,https://maven.repository.redhat.com/ga/
jbang config set run.repos central,https://maven.repository.redhat.com/ga/Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如需更多信息,请参阅 QUARKUS-5183。
1.8.7. Quarkus CLI 只更新红帽构建的 Quarkus 平台版本 复制链接链接已复制到粘贴板!
在 Red Hat build of Quarkus 3.20 中,运行 update 命令只更新红帽构建的 Quarkus 平台 com.redhat.quarkus.platform 中包含的 BOM。如果版本的一部分、quarkus-qpid-jms-bom 和 quarkus-operator-sdk-bom,则可以包括 quarkus-camel-bom 和 quarkus-camel-bom 和 quarkus-cxf-bom。
但是,该命令不会更新与上游社区版本关联的 BOM 版本。如果您的项目同时包含红帽构建的 Quarkus 和上游 BOM,则此问题可能会导致 Quarkus 和上游 BOM 组合不兼容。
update 命令示例
mvn com.redhat.quarkus.platform:quarkus-maven-plugin:3.20.2.SP1-redhat-00003:update -Dmaven.repo.local=<path-to-local-repo>
$ mvn com.redhat.quarkus.platform:quarkus-maven-plugin:3.20.2.SP1-redhat-00003:update -Dmaven.repo.local=<path-to-local-repo>
有问题的 pom.xml 文件示例
- 1
- 没有更新版本。
临时解决方案:手动更新版本号。
如需更多信息,请参阅 QUARKUS-5185。
在 Red Hat build of Quarkus 3.20 中,使用带有返回 Mutiny 类型的异步 REST 客户端的 Hibernate Reactive 可能会导致当前 Hibernate Reactive 会话或事务丢失。
这是因为在没有复制其父级的初始上下文的新 Vert.x 上下文上调用用户回调。因此,回调可能会因为会话或事务缺失而失败,或者静默失败,而不会刷新对数据库的实体更改。更改也可以刷新到新的事务中,而不是预期的外部事务。
临时解决方案
目前还没有可用的临时解决方案。计划在以后的发行版本中解决这个问题。
在 Red Hat build of Quarkus 3.20 中,使用 quarkus/mandrel-for-jdk-21-rhel8:23.1 红帽构建的 Quarkus Native Builder 镜像在启用了 FIPS 的环境中的原生模式中初始化 RSA 密码会生成 NullPointerException (NPE)错误。
这个问题只在启用了 FIPS 的原生模式下发生,它不会影响禁用 FIPS 的原生模式。在启用了 FIPS 的 Red Hat build 时,它也不会影响 JVM 模式。
启用 FIPS 的环境中不支持原生模式。
错误信息示例
2024-10-17 10:45:01,931 ERROR [io.qua.ver.htt.run.QuarkusErrorHandler] (executor-thread-1) HTTP Request to /repro failed, error id: 9b1f5dbb-058b-4c9b-9377-f3acc0a6cba5-1: java.lang.RuntimeException: java.lang.NullPointerException
at org.acme.ReproResource.init(ReproResource.java:38)
...
2024-10-17 10:45:01,931 ERROR [io.qua.ver.htt.run.QuarkusErrorHandler] (executor-thread-1) HTTP Request to /repro failed, error id: 9b1f5dbb-058b-4c9b-9377-f3acc0a6cba5-1: java.lang.RuntimeException: java.lang.NullPointerException
at org.acme.ReproResource.init(ReproResource.java:38)
...
临时解决方案:
如果存在,从
application.properties文件中删除以下属性:quarkus.security.security-providers=SunPKCS11
quarkus.security.security-providers=SunPKCS11Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
application.properties文件中添加以下属性,以在运行时初始化ReproResource类:quarkus.native.additional-build-args=--initialize-at-run-time=org.acme.ReproResource
quarkus.native.additional-build-args=--initialize-at-run-time=org.acme.ReproResourceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
如需更多信息,请参阅 MANDREL-245。
1.8.10. Websocket 下一步:在打开事件异常时不会递增连接错误指标 复制链接链接已复制到粘贴板!
在带有 websocket-next 扩展的 Quarkus 3.20 中,当 @WebSocket 端点在 @OnOpen 生命周期方法中抛出异常时,以下指标不会递增:
-
quarkus_websockets_server_connections_opened_errors_total{uri=${ENDPOINT}} -
quarkus_websockets_client_connections_opened_errors_total{uri=${ENDPOINT}}
这个行为会影响服务器端和客户端 WebSocket 连接指标。
临时解决方案:目前还没有可用的临时解决方案。计划在以后的发行版本中解决这个问题。
如需更多信息,请参阅 QUARKUS-5977。
1.9. Red Hat build of Quarkus 3.20.2 SP1 复制链接链接已复制到粘贴板!
红帽构建的 Quarkus 3.20 提供了更高的稳定性,并包括对对用户有严重影响的错误的修复。
要获得红帽构建的 Quarkus 的最新修复,请确保您使用最新的可用版本,即 3.20.2 SP1。
1.9.1. 程序错误修复 复制链接链接已复制到粘贴板!
要查看本发行版本中解决的问题列表,请参阅 Red Hat build of Quarkus 3.20.2 SP1 程序错误修复。
1.9.2. 安全修复 复制链接链接已复制到粘贴板!
-
CVE-2025-55163
netty-codec-http2: Netty MadeReset HTTP/2 DDoS Vulnerability
1.9.3. 公告 复制链接链接已复制到粘贴板!
在开始使用和部署红帽构建的 Quarkus 3.20.2.SP1 之前,请查看以下与发行版本相关的公告。
1.10. Red Hat build of Quarkus 3.20.2 复制链接链接已复制到粘贴板!
红帽构建的 Quarkus 3.20 提供了更高的稳定性,并包括对对用户有严重影响的错误的修复。
要获得红帽构建的 Quarkus 的最新修复,请确保您使用最新的可用版本,即 3.20.2。
1.10.1. 程序错误修复 复制链接链接已复制到粘贴板!
要查看本发行版本中解决的问题列表,请参阅 红帽构建的 Quarkus 3.20.2 程序错误修复。
在这些修复中,请注意以下可能会影响兼容性的更改: JUnit 5 和 Mockito 版本协调在 Quarkus 测试框架中,列在"更改会影响早期版本"部分的"Changes"部分。
1.10.2. 安全修复 复制链接链接已复制到粘贴板!
-
CVE-2025-49146
quarkus-bom: pgjdbc insecure authentication in channel binding -
CVE-2025-49574
quarkus-bom: Quarkus 潜在的数据泄漏
1.10.3. 公告 复制链接链接已复制到粘贴板!
在开始使用并部署红帽构建的 Quarkus 3.20.2 之前,请查看以下与发行版本相关的公告。
1.11. Red Hat build of Quarkus 3.20.1 复制链接链接已复制到粘贴板!
红帽构建的 Quarkus 3.20 提供了更高的稳定性,并包括对对用户有严重影响的错误的修复。
要获得红帽构建的 Quarkus 的最新修复,请确保您使用最新的可用版本,即 3.20.2。
1.11.1. 程序错误修复 复制链接链接已复制到粘贴板!
要查看本发行版本中解决的问题列表,请参阅 红帽构建的 Quarkus 3.20.1 程序错误修复。
在这些修复中,请注意以下可能会影响兼容性的更改: JUnit 5 和 Mockito 版本协调在 Quarkus 测试框架中,列在"更改会影响早期版本"部分的"Changes"部分。
1.11.2. 安全修复 复制链接链接已复制到粘贴板!
-
CVE-2025-24970
io.netty/netty-handler: SslHandler 无法正确验证数据包,在使用原生 SSLEngine 时可能会导致原生崩溃
1.11.3. 公告 复制链接链接已复制到粘贴板!
在开始使用并部署红帽构建的 Quarkus 3.20.1 之前,请查看以下与发行版本相关的公告。
1.12. 红帽构建的 Quarkus 3.20.0 公告 复制链接链接已复制到粘贴板!
在开始使用并部署红帽构建的 Quarkus 3.20.0 之前,请查看以下与发行版本相关的公告。