在前面的文章《尝试官方的第一个SpringNative 0.11程序》中提到过Quarkus这门技术。这里就简单演示一下它的两个主要功能:Live Coding和Native Build。所谓Live Coding就是热部署,改了代码插件会自动编译打包,省的我们点来点去了;第二个Native Building是Quaukus框架的目标,就是生成目标机器直接可以运行的文件。

项目搭建

跟SpringBoot一样,Quarkus也提供了模板项目在线生成,可以到 https://code.quarkus.io/ 先来创建一个项目。为了简单,我们可以选择一个web端点依赖 Jax-rs 就行:

下载下来用IDEA打开。选择一个高版本的Java,我这里使用jdk 17

之后的操作为了方便,我使用Linux系统,因为我不少必要的环境变量没在win下面配置,而WSL里面是配好的。

Live Coding

不同于JRebel,Quarkus的热部署能力十分强大,甚至修改了pom.xml都不用重启。我们来体验一下。

在IDEA的控制台中输入wsl进入Linux:

进入刚才下载项目的根目录,下面和pom.xml同级有.mnvw这个文件,这是maven的包装文件。执行命令

 ./mvnw compile quarkus:dev

就会启动项目并进入living coding 模式:



正常应该是几秒启动(我本地是2秒多),启动后是这样的

项目里面有一个Resource(和Spring的Controller一样,不过这里用的JAX-RS不是Spring MVC),用来暴露端点:


import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType; @Path("/hello")
public class GreetingResource { @GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "Hello RESTEasy";
}
}

再开一个wsl窗口,通过curl命令来看一下输出:

功能正常!接下来我们引入lombok依赖,并修改代码,看一下Quarkus如何热部署。在pom.xml中增加依赖:

        <dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
<scope>provided</scope>
</dependency>

写好后保存,Quarkus就能探测到然后自动执行maven下载依赖。然后我们在Resource类上增加@Log注解并打印一行日志:

import lombok.extern.java.Log;

@Log
@Path("/hello")
public class GreetingResource { @GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
log.info("快刷新");
return "Hello RESTEasy";
}
}

再次在第二个窗口进行curl请求,这个窗口的返回一样,然后回到启动项目的窗口可以看到日志:

功能体验完了,要退出可以在第一个窗口点击q。

Native Building

接下来体验原生打包能力。

在项目根目录执行命令

./mvnw package -Pnative

或者用mvn package -Pnative也一样。同Spring Native的打包过程一样,这个过程特别费时间也特别占内存,我本地等了2分钟半才结束(比起Spring Native的8分钟还是要快),可能每次时间也不一样,而且差别极大。

如果使用Gradle,打包命令是 ./gradlew build -Dquarkus.package.type=native

进入打包目录target,执行生成的本地可执行文件runner,这次只要两百毫秒就起来了(外网那些人测试说几毫秒几十毫秒,不知道到底啥样的机器)。



同样通过curl请求,可以看到响应和日志:


推荐阅读:《Kubernetes Native Microservices with Quarkus and MicroProfile

Quarkus初体验:动态加载和原生部署的更多相关文章

  1. echart初体验 动态加载数据

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  2. canvas初体验之加载图片

    上一篇的介绍主要是画一些基本的图案,这一篇主要是加载图案. canvas加载图片主要分为两个步骤: 1.获取图片资源. 2.将图片资源画到画布上. 1.1获取图片资源,canvasAPI为我们提供了多 ...

  3. 爱之初体验---编译加载内核模块hello

    1. hello.c #include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h ...

  4. goloader - golang动态加载的实现

    github地址:https://github.com/dearplain/goloader 这里有以前的一些思路:http://www.cnblogs.com/dearplain/p/8145985 ...

  5. golang动态加载原生代码思路

    golang动态加载原生代码思路(非plugin,非so文件.使用mmap形式运行机器码,可释放) 1.用go tool objdump,可以看到任意函数的机器码.汇编指令.偏移.(go源码下面有一个 ...

  6. Vue加载组件、动态加载组件的几种方式

    https://cn.vuejs.org/v2/guide/components.html https://cn.vuejs.org/v2/guide/components-dynamic-async ...

  7. js动态加载以及确定加载完成的代码

    利用原生js动态加载js文件到页面,并在确定加载完成后调用相关function var otherJScipt = document.createElement("script") ...

  8. Android动态加载学习笔记(一)

    前言 上周五DPAndroid小分队就第二阶段分享内容进行了讨论,结果形成了三个主题:性能优化.动态加载.内核远离.我选择的是第二项——动态加载.在目前的Android开发中,这一部分知识还是比较流行 ...

  9. [AngularJS] 使用AngularAMD动态加载Service

    [AngularJS] 使用AngularAMD动态加载Service 前言 「使用AngularAMD动态加载Controller」:这篇文章里介绍如何使用AngularAMD来动态加载Contro ...

  10. [AngularJS] 使用AngularAMD动态加载Controller

    [AngularJS] 使用AngularAMD动态加载Controller 前言 使用AngularJS来开发Single Page Application(SPA)的时候,可以选用AngularU ...

随机推荐

  1. MQTT的使用一

    MQTT:物联网消息传递标准 简介 MQTT是用于物联网(IoT)的OASIS标准消息传递协议.它被设计为一种非常轻量级的发布/订阅消息传送,非常适合以较小的代码占用量和最小的网络带宽连接远程设备.如 ...

  2. Mac远程控制工具有哪些

    适用于Mac的远程控制工具有很多,这里我们给大家列举五个常用软件. 1.Apple Remote Desktop 苹果自带远程桌面正如其名称所承诺的那样.作为 Apple 出品的应用程序,您可以想象它 ...

  3. 2023最新nacos的windows 10安装(保姆级)

    目录 前景提要 一.环境整合 构建工具(参考工具部署方式) 二.找到下载位置 1.在百度中找到下载地址.搜索nacos中文官网. 2.双击进入这个网站,看到首页找到下载位置. 3.进入git地址找到如 ...

  4. IDEA 2020 版配置VUE

    找到IDE工具栏,就是启动项目的run那里 点击下拉框,找到Eidt Confiuration,选择 选择小加号 选取npm 设置npm页,完成后,点击apply run npm ,如图选择run或者 ...

  5. Hugging Face 与 Wiz Research 合作提高人工智能安全性

    我们很高兴地宣布,我们正在与 Wiz 合作,目标是提高我们平台和整个 AI/ML 生态系统的安全性. Wiz 研究人员 与 Hugging Face 就我们平台的安全性进行合作并分享了他们的发现. W ...

  6. gpu机器没有开启ipv6

    参考: https://blog.csdn.net/asdfaa/article/details/137884414 检查系统是否支持 IPv6,查看被禁用了 在启用 IPv6 之前,首先要确保您的系 ...

  7. 日常Bug排查-偶发性读数据不一致

    日常Bug排查-偶发性读数据不一致 前言 日常Bug排查系列都是一些简单Bug的排查.笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材. Bug现场 业务场景 先描述这个问题出现的业务场景. ...

  8. rocketMQ 文章

    10 DefaultMQPushConsumer 使用示例与注意事项.md (lianglianglee.com) 手动回滚事务: (29条消息) spring 控制事务回滚重要知识点:Transac ...

  9. Jenkins 项目构建平台

    引言 Jenkins是一个开源的.提供友好操作界面的持续集成(CI)工具,主要用于持续.自动的构建/测试软件项目.监控外部任务的运行.Jenkins 用 Java 语言编写,可在 Tomcat 等流行 ...

  10. 记录一次由nginx配置引发出来的一系列的缓存问题

    问题描述: 在做一个企业微信的移动端项目时,每次修改代码后并且打包.部署完毕,再次打开页面总是会有上一次的缓存,一开始以为是cookie和webStorage缓存导致的,然后每次清除还是有缓存,后来把 ...