Quarkus 4 开了 Beta 口子

Quarkus 4.0.0.Beta1 已于 2026-10-01 在官博发布,这是下一主版本的首个 Beta。官博写明终版计划在 November 底(原文:The final release is planned for the end of November.),并点名两类动作:扩展作者迁移扩展,终端用户拿应用试跑,问题反馈到 GitHub。Maven Central 上 io.quarkus:quarkus-core 的 maven-metadata.xml 已出现 4.0.0.Beta1,可与官博、GitHub Release tag 交叉核对。

本文只写 4.0 大版本 Beta 与迁移面,不复述站内已发的 3.40 LTS 与 Quarkus Desktop。事实来源压在 官博 与 Migration Guide 4.0;未在这两处写明的能力本文不外推。

版本名片

项核实结果(截至 2026-10-01)
版本4.0.0.Beta1(首个 Beta;GitHub Release tag 同名)
官博https://quarkus.io/blog/quarkus-4-0-0-beta1-released/ (Guillaume Smet,标注 #release)
GA 目标措辞planned for the end of November(11 月底;计划表述,非锁死日期)
仓库https://github.com/quarkusio/quarkus
许可证Apache License 2.0(仓库根目录 LICENSE 全文核实)
Java最低 21;推荐 25;17 不再支持(迁移指南 General 节原文)
坐标io.quarkus.platform:quarkus-bom:4.0.0.Beta1(平台 BOM,Central 200);亦有 io.quarkus:quarkus-bom:4.0.0.Beta1;核心 io.quarkus:quarkus-core:4.0.0.Beta1
迁移入口Migration Guide 4.0;开篇强烈建议先跑 quarkus update,带 ⚙️ ✅ 标记的条目可被自动处理

试跑时把平台 / BOM 指到 Beta1 即可。扩展维护者应优先看指南里「For extension and Quarkus developers」;官博也提醒可到 Zulip 求助。

运行时与网络栈

4.0 把网络底座抬到 Netty 4.2 与 Vert.x 5.x。官博在 Highlights 里还挂了几块可直接对照的能力:

QUIC。 官博称 QUIC 正成为分布式系统的新基础,并点到 HTTP/3、MQTT over QUIC、WebTransport(WebSocket over QUIC)等方向。这是方向性表述,具体协议组合以你启用的扩展与配置为准。

HTTP/3。 可选开启;dev 与 test 模式会自动生成证书,本地试跑少一步手工证书准备。

原生传输。 可用 epoll 或 io_uring 提高并发;官博写明在 native executable 下同样可用。若你的流水线会打 native 镜像,这块应纳入 Beta 回归,而不是只在 JVM 模式点一下。

容器侧,迁移指南写明默认容器镜像基线改为 UBI 10。应用业务代码未必立刻改,但扩展、原生传输、镜像基线与依赖 Netty/Vert.x 行为的代码路径,都值得提前扫一遍。

HTTP 层另有一处小而硬的行为变化:迁移指南写明服务器默认不再把分号 ; 当作查询参数分隔符,只认 &。需要旧行为时设 quarkus.http.use-semicolon-as-query-param-delimiter=true(管理接口有对应项)。URL 里曾依赖 ; 分隔的调用方,要在 Beta 里用真实流量打一下。

Observation API 与 Dev UI

可观测是官博单列的增量。Observation API 支持 @Observed 与编程式写法,用来产出 metrics 与 traces,并与 Micrometer、OpenTelemetry 协同。Dev UI 增加 Observability 区块,官博称在 dev mode 下开箱可用,无需额外接线。

迁移指南把默认行为写得更细。接入 quarkus-opentelemetry 或 quarkus-micrometer-opentelemetry 后,OpenTelemetry Metrics / Logs 现为稳定且默认开启;quarkus-micrometer-opentelemetry 也标为稳定,并含 Micrometer 到 OTel 的指标桥。若同时还挂着 quarkus-micrometer-registry-prometheus 等 registry,构建期可能警告「Micrometer 与 OpenTelemetry 两边都在采」;不需要 OTel metrics 时可设:

quarkus.otel.metrics.enabled=false

Micrometer 侧指南还记录了 Prometheus client 升到 v1.x 等变更(计数类型、部分指标名、registry 包名)。有自定义仪表盘或告警规则的团队,应用升级后应对照抓一次 /q/metrics 或等价端点,核对名字与标签是否仍对得上。

规范栈:REST、ORM、Jackson、CDI

官博 Highlights 与迁移指南对得上的大块如下。

Jakarta REST 4。 官博提到 JSON Merge Patch 与新的 multipart API。迁移指南补充:升到 Jakarta REST 4 API,Quarkus REST 对 Jakarta REST 4 为部分支持,并升到 RESTEasy 7;另有 SseEventSink.close() 抛 IOException、服务端不得再直接把 REST Client 的 Response / RestResponse 当返回值等约束。

Hibernate ORM 8。 对接 Jakarta Persistence 4.0 与 Jakarta Data 1.1。迁移指南另提示:构建期方言假定的数据库最低版本抬高(例如 PostgreSQL 默认按 16,还有 MariaDB 11.4、MySQL 8.4 等列表)。连到更旧的库可能直接启动失败;可按报错升级数据库,或设置 quarkus.datasource.db-version=…,最后手段才是关掉版本检查。持久化相关的旧配置键(如 quarkus.hibernate-orm.database.generation)已在「已删除配置」表里,需换成 schema-management.* 等新键。

Jackson 3。 核心与 databind 包名迁到 tools.jackson.core / tools.jackson.databind;注解仍在 com.fasterxml.jackson.annotation。运行时 CDI 产出 JsonMapper(仍可注入 ObjectMapper,因其继承关系,但按精确类型做 programmatic lookup 可能要改)。ObjectMapperCustomizer 更名为 JsonMapperBuilderCustomizer,入参改为 JsonMapper.Builder。若干序列化默认值随 Jackson 3 变化,Quarkus 提供 quarkus.jackson.* 可回退部分行为;其中 fail-on-empty-beans 与 write-durations-as-timestamps 等,指南写明 Quarkus 默认仍贴近 Jackson 2,以减少误伤。

CDI 5.0。 官博点名新注解 @Reserve、@Eager。具体语义以 CDI 5.0 与 Quarkus ArC 文档为准,Beta 阶段适合在扩展与框架代码里先摸清生命周期影响。

消息侧,官博还列了新的 JMS 扩展(写明兼容 Spring JMS、pooled JMS、IronJacamar),以及 Kafka 事务侧的 @ExactlyOnce。有消息中间件负载的应用,适合在 Beta 里单独开一条验证路径。

迁移硬点与 quarkus update

迁移指南开篇:强烈建议使用 quarkus update;标 ⚙️ ✅ 的条目可由该命令自动处理。大版本指南比常规 minor 更厚,应用侧最先碰到的往往是下面几块。

Jackson 2 → 3。 用户代码里凡直接 import com.fasterxml.jackson.databind / com.fasterxml.jackson.core 的,要改到 tools.jackson.*。注解可不动。自定义 Customizer 要换新接口。这是编译期就能暴露的硬迁移,适合作为 Beta 分支的第一刀。

OpenTelemetry 默认协议与采样。 4.x 默认 OTLP 协议从 grpc 改为 http/protobuf,默认端口从 4317 改为 4318。协议与端口必须匹配;采集端若仍只听 gRPC 4317,需要显式改回,或让 collector 同时接纳 4318:

# 需要继续走 gRPC / 4317 时显式指定(也可按 traces/metrics/logs 分别设置)
quarkus.otel.exporter.otlp.protocol=grpc
quarkus.otel.exporter.otlp.endpoint=http://localhost:4317

采样默认从 parentbased_always_on(ratio 1.0)改为 parentbased_traceidratio(ratio 0.1)。dev mode 下 ratio 仍默认 1.0。生产若依赖「默认几乎全采」,升级后采样会变稀,看板与告警阈值可能要重估。

大量已弃用配置已删除。 指南列出一长串在 Quarkus 3.33 之前就标 deprecated、现已移除的属性(例如日志配置里旧的 enable 写法改为 enabled,以及 snapstart、native、Hibernate schema、AppCDS/AOT 等旧键)。旧键不会再兜底,只会被标 unused。建议顺序:

quarkus update

然后人工处理 Jackson import、OTel 协议/端口与采样、方言版本,以及指南里未标自动迁移的条目。官博强调本阶段反馈对 4.0 最终质量很关键。

试跑坐标示例(平台 BOM;版本号以 Central 已发布的 4.0.0.Beta1 为准):

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>io.quarkus.platform</groupId>
      <artifactId>quarkus-bom</artifactId>
      <version>4.0.0.Beta1</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

Jackson Customizer 形态变化(摘自迁移指南示例,便于对照编译错误):

// Jackson 3:实现 JsonMapperBuilderCustomizer,入参为 JsonMapper.Builder
@Singleton
public class MyCustomizer implements JsonMapperBuilderCustomizer {
    public void customize(JsonMapper.Builder builder) {
        builder.enable(SerializationFeature.INDENT_OUTPUT);
    }
}

谁该在 Beta 阶段上手

更该现在就试: 维护 Quarkus 扩展的作者(官博直接点名);计划跟 4.0 GA、需要提前摸 Jackson 3、Vert.x 5、Hibernate 8 边界的应用团队;依赖 OTel 导出或深度定制 Jackson 的项目;想验证 HTTP/3、epoll/io_uring、Observation API / Dev UI Observability 的团队。

可以再等等: 生产必须钉在已发布 LTS / 稳定线上的业务(站内另有 3.40 LTS 选题可对照);短期内无法升到 Java 21 的环境;没有人力消化大版本破坏性变更、只想跟 micro 升级的团队。Desktop / AWT 相关能力也不在本稿范围,请看站内既有 Desktop 文,避免把两条线混谈。

Beta 不是 GA。坐标已能从 Central 拉取,但扩展生态与第三方兼容仍在跟进;官博也写了「more are coming」,后续 Beta / CR 还可能继续叠能力与修复。试跑建议用独立分支或副本环境,对照 Migration Guide 4.0 逐项打勾,问题提到 quarkusio/quarkus Issues。许可证为 Apache-2.0;延伸阅读以官博与迁移指南为主源。

— 感谢阅读 —

一起交流

分享你的思考,让讨论更进一步。