ITPub博客

首页 > 数据库 > 数据库开发技术 > Hello, Quarkus

Hello, Quarkus

原创 数据库开发技术 作者:云原生指北 时间:2021-04-05 21:16:22 0 删除 编辑

Wikipedia上有关 Quarkus 的信息还很少,只有一句简单的介绍:

Quarkus 是专为 OpenJDK HotSpot 和 GraalVM 定制的全栈 Kubernetes 原生 Java 应用程序框架。与如 Spring 之类的其他框架相比,它提供了较小的内存占用并缩短了启动时间。它允许结合命令式和非阻塞响应式编程。

从 Quarkus 的官网[1],可以看到其有几个特性:

•容器优先•统一了命令式和响应式编程•开发者友好•最佳品种的库及标准

更多 Quarkus 可以参考官网[2]的介绍及文档。今天主要就是跑一下 Quarkus 的 Hello world。

放一张官网的图:

环境准备

•基于 Java 11 的 GraalVM•Maven 3.6.2+

笔者使用的是 macos 10.15.4,GraalVM 和 Maven 建议通过 sdkman[3] 进行安装。

$ sdk install java 21.0.0.2.r11-grl #如果已使用其他 java 版本,可以使用命令 sdk use java 21.0.0.2.r11-grl 进行切换$ sdk install maven 3.6.3

验证安装

$ java -versionopenjdk version "11.0.10" 2021-01-19OpenJDK Runtime Environment GraalVM CE 21.0.0.2 (build 11.0.10+8-jvmci-21.0-b06)OpenJDK 64-Bit Server VM GraalVM CE 21.0.0.2 (build 11.0.10+8-jvmci-21.0-b06, mixed mode, sharing)$ mvn -versionApache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)Maven home: /Users/addo/.sdkman/candidates/maven/currentJava version: 11.0.10, vendor: GraalVM Community, runtime: /Users/addo/.sdkman/candidates/java/21.0.0.2.r11-grlDefault locale: en_CN, platform encoding: UTF-8OS name: "mac os x", version: "10.15.4", arch: "x86_64", family: "mac"

快速开始

创建项目

创建 quarkus 项目最快的方式是通过 quarkus-maven-plugin 来创建,使用如下的命令快速可以创建

$ mvn io.quarkus:quarkus-maven-plugin:1.13.0.Final:create \    -DprojectGroupId=com.atbug.quickstart \    -DprojectArtifactId=quarkus-getting-started \    -DclassName="com.atbug.quickstart.GreetingResource" \    -Dpath="/hello"

在 ./quarkus-getting-started 中提供了:

•maven 的项目结构•com.atbug.quickstart.GreetingResource 暴露了 /hello 端点,通过 JAX-RS 注解实现•相关的单元测试•应用启动后可以通过 http://localhost:8080 打开的启动页面•src/main/docker 下提供了 native 和 jvm 风格的 Dockerfile•应用配置文件

运行应用

执行 ./mvnw compile quarkus:dev 命令可启动应用

__  ____  __  _____   ___  __ ____  ______ --/ __ \/ / / / _ | / _ \/ //_/ / / / __/ -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \--\___\_\____/_/ |_/_/|_/_/|_|\____/___/2021-04-05 19:48:36,419 INFO  [io.quarkus] (Quarkus Main Thread) quarkus-getting-started 1.0.0-SNAPSHOT on JVM (powered by Quarkus 1.13.0.Final) started in 2.135s. Listening on: http://localhost:80802021-04-05 19:48:36,448 INFO  [io.quarkus] (Quarkus Main Thread) Profile dev activated. Live Coding activated.2021-04-05 19:48:36,448 INFO  [io.quarkus] (Quarkus Main Thread) Installed features: [cdi, resteasy]

访问 /hello 断点

$ http :8080/helloHTTP/1.1 200 OKContent-Length: 5Content-Type: text/plain;charset=UTF-8Hello

笔者通过 httpie 进行访问,可以通过 brew install httpie 进行安装,推荐使用。

增加新的断点

    @GET    @Produces(MediaType.TEXT_PLAIN)    @Path("/greeting/{name}")    public String greeting(@PathParam String name) {        return "Hello, " + name;    }

注:PathParam 来自 org.jboss.resteasy.annotations.jaxrs.PathParam

测试:

$ http :8080/hello/greeting/QuarkusHTTP/1.1 200 OKContent-Length: 14Content-Type: text/plain;charset=UTF-8Hello, Quarkus

为新的端点增加单元测试

    @Test    public void testGreetingEndpoint() {        final String uuid = UUID.randomUUID().toString();        given()                .pathParam("name", uuid)                .when().get("/hello/greeting/{name}")                .then()                .statusCode(200)                .body(is("Hello, " + uuid));    }

通过 ./mvnw test 运行单元测试

注意这里使用 intellij 运行单元测试的话,会报错。需要修改 Java Compiler 的配置,添加额外的命令行参数 -parameters

打包

与通常的 maven 项目打包方式一样,执行 ./mvnw package,在 target 目录中:

•quarkus-getting-started-1.0.0-SNAPSHOT.jar 仅包含了项目编译的类和资源文件,是不可执行的 jar•quarkus-app 目录中包含了可执行的 jar 文件 quarkus-run.jar ,但是,其并不是一个 über-jar,项目的依赖库都位于 lib目录中。

可以通过执行 java -jar target/quarkus-app/quarkus-run.jar 在启动应用。

这意味着假如你想在容器中运行,需要部署整个 quarkus-app 目录

使用 fast-jar

qurakus 的打包方式有两种:legacy-jar 和 fast-jar。可以在 application.properties 文件中进行指定,未显式指定默认为 legacy-jar。

quarkus.package.type=fast-jar

如果要在容器中运行,同样需要部署整个 quarkus-app 目录 fast-jar 类型的包比 legacy-jar 的包启动会快一点点,同时占用的内存也更低。因为 fast-jar 的包含了依赖包中的类和资源文件的索引,避免在类和资源文件加载时对 classpath 下的包的查找。

下一篇,试试构建一个原生的可执行文件。

引用链接

[1] 官网: https://quarkus.io/
[2] 官网: https://quarkus.io/
[3] sdkman: https://sdkman.io


原文作者:云原生指北;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2020-03-04

  • 博文量
    130
  • 访问量
    54643