适合云原生的 Java 框架 Quarkus 快速入门!

3,714 阅读5分钟

在 Java 开发领域,Spring Boot 和 Quarkus 已经成为突出的框架,每个框架都具有独特的优势和功能。在这篇博客中,我们将深入探讨 Spring Boot 和 Quarkus 之间的技术比较,探索它们的功能、性能和对不同用例的适用性。

Quarkus

Quarkus 是 Red Hat 开发的开源框架,专为云原生和无服务器应用程序而设计。它采用 “supersonic, subatomic” 的方法来进行 Java 开发,专注于快速启动时间、低内存消耗和高效的资源利用。Quarkus 通过利用提前 (AOT) 编译、GraalVM 和原生镜像生成来实现这些性能优势。此外,Quarkus 还为流行的 Java 标准(如 Jakarta EE 和 MicroProfile)提供原生支持。

Spring Boot 由 Pivotal Software 开发,是一个成熟且被广泛采用的 Java 框架,以其简单性和生产力而闻名。它遵循约定优先于配置的原则,为构建企业级应用程序提供了一个庞大的库和工具生态系统。Spring Boot 支持快速开发,并通过其自动配置功能简化配置,使开发人员能够专注于业务逻辑而不是样板代码。

  • supersonic:超音速 --> 快
  • subatomic:亚原子 --> 小

Quarkus vs Spring Boot

  • Performance: 性能: 【在SpringBoot不支持Native时】

在性能方面:Quarkus 以其超快的启动时间和最小的内存占用超过了 Spring Boot。

Quarkus通过将应用程序编译为本机可执行文件来实现这些性能提升,更快的启动时间并减少了内存开销。

Quarkus 特别适用于微服务、无服务器功能和性能至关重要的资源受限环境。

  • Developer Experience: 开发者体验: 开发者体验方面:Spring Boot 较于 Quarkus更成熟、使用上更直观、更简单。

Spring Boot拥有成熟的生态系统、海量的文档和庞大的社区,为开发者提供了全面的支持和资源。

Quarkus 作为一个较新的框架,可能有一个较小的社区和较少的第三方库,但它提供了具有实时编码和热重载等功能的现代开发体验。

  • Ecosystem and Integrations: 生态系统和集成: 生态系统和集成方面:Spring Boot 较于 Quarkus 要好一些。但是Quarkus也不太差。

Spring Boot 的广泛生态系统包括各种模块和集成,可满足各种企业需求,例如数据库访问、安全性、消息传递等。开发人员可以利用 Spring Boot 丰富的入门项目和集成集来加速开发并减少样板代码。

Quarkus在发展其生态系统的同时,为流行的Java标准提供原生支持,并与Hibernate、Apache Camel和Eclipse Vert.x等技术集成。

Spring Boot 和 Quarkus 都是强大的 Java 开发框架,每个框架都有其优势和用例。

  • Spring Boot 在企业级应用程序中表现出色,在这些应用程序中,成熟的生态系统和全面的工具是必不可少的。
  • Quarkus 在性能和资源效率至关重要的云原生和无服务器环境中大放异彩。

总之,Spring Boot 和 Quarkus 之间的选择取决于项目的特定要求和约束,但这两种框架都为构建现代 Java 应用程序提供了坚实的基础。

Quarkus性能

在官方文档给出了Quarkus与 传统技术展之间在 RSS 和 Response Time上做了性能测试,如下图; image.png 我们就总结一下吧;

  • 在内存占用上,Quarkus + OpenJdk 比传统云技术栈,内存使用减少近一半,Quarkus + native 占用内存更少。
  • 在启动速度上,Quarkus + JIT + OpenJDK 比传统技术栈提升近5倍
  • 在响应速度上,Quarkus + JIT + OpenJDK 比传统云技术栈,响应速度4到5倍的提升。

另外:在spring-boot-vs-quarkus文章中有更加详细的对比分析,大家可以阅读。

创建一个Quarkus项目

创建项目

  • 第一种方式:maven 手动创建 【不推荐,难记不方便】

    mvn io.quarkus.platform:quarkus-maven-plugin:3.12.3:create \
    -DprojectGroupId=my-groupId \
    -DprojectArtifactId=my-artifactId
    
  • 第二种方式:code.quarkus.io/ 【次推】

  • 第三种方式:通过 IDEA 创建,【首推】

image.png 选择通过 IDEA 创建,经过三步就创建一个Quarkus项目,默认提供了一个 /hello 接口

按照 get-started 操作步骤也可以创建一个Quarkus项目

运行项目

  • 通过执行 ./mvnw compile quarkus:dev

  • 项目中添加 Main方法 「 项目生成默认没有该类 」

    package org.ivy;
    import io.quarkus.runtime.Quarkus;
    import io.quarkus.runtime.annotations.QuarkusMain;
    
    @QuarkusMain
    public class ExampleQuarkusApplication {
        public static void main(String[] args) {
            Quarkus.run(args);
        }
    }
    

    不论通过上面两种方式的哪一种,控制台输出的结果如下图所示: image.png

    默认端口:8080 然后访问 localhost:8080 image.png

测试项目

访问 localhost:8080,然后点击VISIT THE DEV UI,跳转到下图界面,然后Endpoints,访问/hello即可测试接口。 image.png

另外可以在浏览器地址栏输入 http://localhost:8080/hello 进行测试。

至此一个Quarkus框架就搭建、运行和测试就完成了,后续将会详细介绍关于Quarkus框架的使用,包括Web项目开发的一整套知识。

如何选择Spring Boot与 Quarkus框架

Spring Boot已经支持native,现在来看是否需要选择Quarkus需要慎重的考虑。主要原因;

  • Spring Boot较于Quarkus框架的生态相对更加成熟,社区、文档更加完善
  • Spring Boot较于Quarkus框架了解的开发人员更多。
  • Spring Boot较于Quarkus使用更为广泛,能力得到很好的验证。

虽然Spring Boot也支持 Native-image,但是Quarkus框架在低内存、快速启动、与k8s、docker容器更方便的集成是其优势。还有一个比较重要的点是,Spring的响应式编程与阻塞式必须独立分开的,而quarkus框架可以混合使用。

所以对于技术的选择,首先要根据自身业务特点,其次想使用技术的哪个方面,最后就是考虑其它方面,比如技术成熟度、活跃度、上手难度、人力等等。

# Spring Native documentation

参考文档