在 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上做了性能测试,如下图;
我们就总结一下吧;
- 在内存占用上,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 创建,【首推】
选择通过 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); } }不论通过上面两种方式的哪一种,控制台输出的结果如下图所示:
默认端口:8080 然后访问 localhost:8080
测试项目
访问 localhost:8080,然后点击VISIT THE DEV UI,跳转到下图界面,然后Endpoints,访问/hello即可测试接口。
另外可以在浏览器地址栏输入 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。