今天聊的 Quarkus,就是 Red Hat 专门为云原生时代打造的 Java 框架——启动快、占内存少,写起来还像 Spring 一样顺手。

图片

目录

  • 一、Quarkus 是什么?

  • 二、为什么它比 Spring Boot 更快、更省内存?

  • 三、一张图看懂两者差异

  • 四、5 分钟上手:写一个 REST 接口

  • 五、几个值得记住的核心特性

  • 六、适合用 Quarkus 的场景

  • 七、和 Spring Boot 怎么选?


一、Quarkus 是什么?

Quarkus 是 2019 年由 Red Hat 发布的开源 Java 框架,口号很直白:Supersonic Subatomic Java——超音速、亚原子级轻量。

它不是什么「另起炉灶」的新语言,你依然写熟悉的 Java 代码,用 JAX-RS 写接口、用 CDI 做依赖注入,但底层思路变了:把大量工作从「运行时」挪到「编译时」,让应用启动更快、运行更轻。

简单说:Quarkus 是写给 容器、Kubernetes、Serverless 这些场景的 Java 框架。


二、为什么它比 Spring Boot 更快、更省内存?

传统 Spring Boot 的启动流程,大致是这样:

图片

每一步都要花时间、占内存。一个中等规模的 Spring Boot 应用,冷启动 2~5 秒、内存 300~500 MB 并不稀奇。

Quarkus 换了个思路——编译时优化

图片

核心差异可以概括成一句话:

对比项Spring BootQuarkus
优化时机主要在运行时(反射 + 扫描)主要在编译时(代码生成)
JVM 启动通常 2~5 秒通常 0.3~1 秒
JVM 内存300~500 MB 常见150~200 MB 左右
Native 启动Spring Native 约 100 ms+可低至 10~50 ms
Native 内存约 150 MB约 70 MB

图片


三、一张图看懂两者差异

图片

左边是 Spring Boot 的「先启动、再干活」;右边是 Quarkus 的「编译时就准备好,启动即就绪」。这就是它快好几倍、内存省一半的根本原因。


四、5 分钟上手:写一个 REST 接口

1. 创建项目

用 Quarkus 官方脚手架,选 REST 扩展即可:

# 使用 Quarkus CLI 创建项目quarkus create app com.example:hello-quarkus \  --extension=rest,rest-jackson
cd hello-quarkus

2. 写一个 REST 资源类

package com.example;
import jakarta.ws.rs.GET;import jakarta.ws.rs.Path;import jakarta.ws.rs.Produces;import jakarta.ws.rs.core.MediaType;import java.time.LocalDateTime;import java.time.format.DateTimeFormatter;
/** * 示例 REST 接口 * 访问路径:/hello */@Path("/hello")public class HelloResource {
    private static final DateTimeFormatter FORMATTER =            DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
    /**     * 返回问候语和当前时间     */    @GET    @Produces(MediaType.APPLICATION_JSON)    public Greeting hello() {        return new Greeting(                "Hello, Quarkus!",                LocalDateTime.now().format(FORMATTER)        );    }
    /** 响应数据对象 */    public record Greeting(String message, String time) {}}

3. 用 CDI 做依赖注入

Quarkus 默认用 CDI(Contexts and Dependency Injection),写法和 Spring 很像:

package com.example;
import jakarta.enterprise.context.ApplicationScoped;import jakarta.inject.Inject;import jakarta.ws.rs.GET;import jakarta.ws.rs.Path;import jakarta.ws.rs.Produces;import jakarta.ws.rs.core.MediaType;
/** * 带依赖注入的 REST 接口 */@Path("/users")public class UserResource {
    @Inject    UserService userService;
    @GET    @Produces(MediaType.APPLICATION_JSON)    public String list() {        return userService.getUserCount();    }}
/** * 业务服务层 */@ApplicationScopedpublic class UserService {
    public String getUserCount() {        return "当前用户数:128";    }}

4. 本地开发模式(热重载)

# 开发模式:改代码自动生效,不用重启./mvnw quarkus:dev

浏览器访问 http://localhost:8080/hello,就能看到 JSON 响应。开发体验和 Spring Boot 的 spring-boot-devtools 类似,但启动更快。

5. 配置文件

application.properties 写法也很熟悉:

# 服务端口quarkus.http.port=8080
# 应用名称quarkus.application.name=hello-quarkus
# 开启 OpenAPI 文档(需添加 quarkus-smallrye-openapi 扩展)quarkus.swagger-ui.always-include=true

五、几个值得记住的核心特性

① 扩展机制(Extension)

Quarkus 的功能以「扩展」形式提供,比如 quarkus-hibernate-orm-panache(数据库)、quarkus-resteasy-reactive(响应式 REST)。扩展在编译期就把配置、反射信息处理好了,运行时几乎零开销。

② Panache:更简洁的数据库操作

package com.example.entity;
import io.quarkus.hibernate.orm.panache.PanacheEntity;import jakarta.persistence.Entity;
/** * 用户实体 —— 继承 PanacheEntity 后自带 CRUD */@Entitypublic class User extends PanacheEntity {    public String name;    public String email;
    /** 按名称查询 */    public static User findByName(String name) {        return find("name", name).firstResult();    }}

一行 User.findByName("张三") 就能查库,比 JPA + Repository 省不少样板代码。

③ 响应式优先

Quarkus 底层基于 Vert.x,天然支持响应式编程。高并发场景下,Reactive 栈的吞吐量往往比传统阻塞式高出一截。

④ 开发体验友好

  • quarkus:dev 热重载

  • 内置 Dev UI(http://localhost:8080/q/dev/

  • 和 Spring 类似的注解风格,学习成本低


六、适合用 Quarkus 的场景

图片

场景为什么选 Quarkus
Kubernetes 微服务Pod 多、密度高,内存省 = 省钱
Serverless / FaaS冷启动快,不会被计费拖垮
边缘计算 / IoT资源有限,跑不动臃肿的 JVM 应用
高并发 API 网关响应式栈吞吐高、延迟低
新项目、云原生优先没有历史包袱,直接享受编译时优化

七、和 Spring Boot 怎么选?

这不是「谁取代谁」的问题,而是「什么场景用什么工具」。

选 Quarkus,如果你:

  • 新项目,目标就是 K8s / 云原生

  • 对启动时间和内存敏感(Serverless、弹性伸缩)

  • 团队愿意接受相对小一些的生态(但主流中间件都有扩展)

继续用 Spring Boot,如果你:

  • 大型企业项目,深度依赖 Spring Cloud、Spring Security 全家桶

  • 团队 Spring 经验丰富,迁移成本是首要考量

  • 应用长期运行、对冷启动不敏感(比如单体后台)

两个框架的代码风格有相似之处,有 Spring 基础的开发者,通常 一两周就能上手 Quarkus

更多推荐