概述
官网,中文官网,几乎纯Java实现、开源(GitHub,15.9K Star,3.3K Fork)超音速、亚原子级框架。
支持与GraalVM集成,通过AOT(提前编译)方式将Java应用编译为原生可执行文件,从而大幅提升性能。基于Java标准构建,可继续使用CDI、JAX-RS等标准API,无需学习新语法。
提供丰富扩展支持:
- Hibernate ORM
- Apache Kafka
- OpenShift、Kubernetes集成
- Vert.x异步编程模型
优势
- 开发者友好:一个内聚平台,通过统一配置和轻松的原生可执行文件生成来优化开发者的体验。零配置,瞬间完成实时重新加载,为80%的常用用法简化代码,其余20%具有灵活性
- 性能:在构建阶段简化框架优化,以减少运行时依赖性并提高效率。通过预先计算元数据和优化类加载,可确保JVM和原生二进制部署的快速启动时间,从而减少内存使用量
- Kube-Native:和Kubernetes的结合为创建可扩展、快速和轻量级的应用程序提供理想的环境。通过工具、预构建的集成、应用程序服务等显着提高了开发人员的生产力
- 社区和标准:提供内聚的易于使用的全栈框架,超过五十个主流库,且列表不断增长
- 反应式核心:建立在强大的反应式核心之上,确保快速高效的性能,支持各种现代应用程序的开发
- 容器优先:为GraalVM和HotSpot定制应用程序。编译时启动,快速启动,低RSS内存(不仅仅是堆大小),可在Kubernetes等容器编排平台中提供近乎瞬时的扩展和高密度内存利用率
实战
使用Maven插件创建Quarkus项目:
xml
mvn io.quarkus:quarkus-maven-plugin:3.39.4:create \
-DprojectGroupId=com.johnny.quarkus \
-DprojectArtifactId=quarkus-demo \
-DclassName="com.johnny.quarkus.Hello" \
-Dpath="/hello"
首次执行会下载Maven依赖,执行成功会生成一个包含基础结构的Maven项目,包含:
- Hello类,定义
/hello接口 - 默认配置文件
- Dockerfile文件
生成的项目

自动生成的Dockerfile.native内容如下:
bash
FROM registry.access.redhat.com/ubi9/ubi-minimal:9.7
WORKDIR /work/
RUN chown 1001 /work \
&& chmod "g+rwX" /work \
&& chown 1001:root /work
COPY --chown=1001:root --chmod=0755 target/*-runner /work/application
EXPOSE 8080
USER 1001
ENTRYPOINT ["./application", "-Dquarkus.http.host=0.0.0.0"]
的Dockerfile.native-micro内容如下:
bash
FROM quay.io/quarkus/ubi9-quarkus-micro-image:2.0
WORKDIR /work/
RUN chown 1001 /work \
&& chmod "g+rwX" /work \
&& chown 1001:root /work
COPY --chown=1001:root --chmod=0755 target/*-runner /work/application
EXPOSE 8080
USER 1001
ENTRYPOINT ["./application", "-Dquarkus.http.host=0.0.0.0"]
和上面的Dockerfile.native文件的区别仅仅是FROM指定的基础镜像。
Dockerfile.jvm内容如下:
bash
FROM registry.access.redhat.com/ubi9/openjdk-17-runtime:1.24
ENV LANGUAGE='en_US:en'
# We make four distinct layers so if there are application changes the library layers can be re-used
COPY --chown=185 target/quarkus-app/lib/ /deployments/lib/
COPY --chown=185 target/quarkus-app/*.jar /deployments/
COPY --chown=185 target/quarkus-app/app/ /deployments/app/
COPY --chown=185 target/quarkus-app/quarkus/ /deployments/quarkus/
EXPOSE 8080
USER 185
ENV JAVA_OPTS_APPEND="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
ENV JAVA_APP_JAR="/deployments/quarkus-run.jar"
ENTRYPOINT [ "/opt/jboss/container/java/run/run-java.sh" ]
Dockerfile.legacy-jar内容如下:
bash
FROM registry.access.redhat.com/ubi9/openjdk-17-runtime:1.24
ENV LANGUAGE='en_US:en'
COPY target/lib/* /deployments/lib/
COPY target/*-runner.jar /deployments/quarkus-run.jar
EXPOSE 8080
USER 185
ENV JAVA_OPTS_APPEND="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
ENV JAVA_APP_JAR="/deployments/quarkus-run.jar"
ENTRYPOINT [ "/opt/jboss/container/java/run/run-java.sh" ]
和上面的Dockerfile.jvm文件的区别在于COPY指定的复制文件。
sql
开发模式支持热重载(Hot Reload)功能,修改Java类或配置文件后,刷新页面即可生效。
执行命令启动开发模式:./mvnw compile quarkus:dev
执行命令mvn package,如果遇到报错Unknown packaging: quarkus,则修改pom.xml文件,<packaging>quarkus</packaging>改成<packaging>jar</packaging>,将在target/目录下生成quarkus-demo-1.0.0-SNAPSHOT.jar文件。执行./mvnw package命令,相比于mvn package,将在target/目录下额外生成quarkus-project-1.0-SNAPSHOT-runner.jar可执行JAR:
bash
运行./mvnw package -Pnative,因需进行AOT编译,构建过程会稍长。验证构建结果:./mvnw verify -Pnative。
使用Docker构建容器镜像:./mvnw package -Pnative -Dnative-image.docker-build=true
bash
bash
bash
bash
原生镜像
Quarkus可将应用编译为原生可执行文件,显著提升启动速度和首次请求响应时间。包含运行所需的一切,包括最小化的JVM。
要构建原生镜像(Native Image),需安装GraalVM并配置GRAALVM_HOME环境变量。
https://graalvm.java.net.cn/downloads/#
下载zip压缩包,解压缩,看起来像是一个JDK发行版(实际上就是如此);配置为JAVA_HOME,即可使用。