Quarkus初体验:动态加载和原生部署
在前面的文章《尝试官方的第一个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初体验:动态加载和原生部署的更多相关文章
- echart初体验 动态加载数据
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- canvas初体验之加载图片
上一篇的介绍主要是画一些基本的图案,这一篇主要是加载图案. canvas加载图片主要分为两个步骤: 1.获取图片资源. 2.将图片资源画到画布上. 1.1获取图片资源,canvasAPI为我们提供了多 ...
- 爱之初体验---编译加载内核模块hello
1. hello.c #include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h ...
- goloader - golang动态加载的实现
github地址:https://github.com/dearplain/goloader 这里有以前的一些思路:http://www.cnblogs.com/dearplain/p/8145985 ...
- golang动态加载原生代码思路
golang动态加载原生代码思路(非plugin,非so文件.使用mmap形式运行机器码,可释放) 1.用go tool objdump,可以看到任意函数的机器码.汇编指令.偏移.(go源码下面有一个 ...
- Vue加载组件、动态加载组件的几种方式
https://cn.vuejs.org/v2/guide/components.html https://cn.vuejs.org/v2/guide/components-dynamic-async ...
- js动态加载以及确定加载完成的代码
利用原生js动态加载js文件到页面,并在确定加载完成后调用相关function var otherJScipt = document.createElement("script") ...
- Android动态加载学习笔记(一)
前言 上周五DPAndroid小分队就第二阶段分享内容进行了讨论,结果形成了三个主题:性能优化.动态加载.内核远离.我选择的是第二项——动态加载.在目前的Android开发中,这一部分知识还是比较流行 ...
- [AngularJS] 使用AngularAMD动态加载Service
[AngularJS] 使用AngularAMD动态加载Service 前言 「使用AngularAMD动态加载Controller」:这篇文章里介绍如何使用AngularAMD来动态加载Contro ...
- [AngularJS] 使用AngularAMD动态加载Controller
[AngularJS] 使用AngularAMD动态加载Controller 前言 使用AngularJS来开发Single Page Application(SPA)的时候,可以选用AngularU ...
随机推荐
- oracle中commit之后如何进行回滚
commit之后 第一种: 记住大概的时间,获取前大概时间的数据. select * from Test as of timestamp to_timestamp('2021-12-08 09:30: ...
- python教程6.1-模块和包
模块分类 1.内置标准模块(⼜称标准库)执⾏help('modules')查看所有python⾃带模块列表 2.第三⽅开源模块,可通过pip install 模块名 联⽹安装 3.⾃定义模块 模块导入 ...
- 基于 three.js 加载器分别加载模型
点击查看代码 /** * 参数:模型文件路径,成功回调函数 * * 基于 three.js 加载器分别加载模型 * * 全部加载后通过回调函数传出打印 */ import { FBXLoader } ...
- angular自定义验证器实现所遇到的问题
1:返回值问题 校验器 2:返回值类型 3:创建自定义指令配置注意 1:校验器 回过头来看一下表单校验的校验器.校验器共有两种,同步校验和异步校验,验证器函数接受一个control,然后返回一组错误对 ...
- 基于Python实现MapReduce
一.什么是MapReduce 首先,将这个单词分解为Map.Reduce. Map阶段:在这个阶段,输入数据集被分割成小块,并由多个Map任务处理.每个Map任务将输入数据映射为一系列(key, va ...
- Python 将PowerPoint (PPT/PPTX) 转为HTML
PPT是传递信息.进行汇报和推广产品的重要工具.然而,有时我们需要将这些精心设计的PPT演示文稿发布到网络上,以便于更广泛的访问和分享.本文将介绍如何使用Python将PowerPoint文档转换为网 ...
- 【题解】A18747.眼红的同学
题目链接:眼红的同学 题干信息很简单,看到数据量之后就不简单了.在数据量小的时候可以使用双层循环暴力的方法来求答案.显然对于这道题而言O(n^2)是完全过不去的. 前置知识: 使用树状数组求逆序对 会 ...
- [NOIP2004 普及组] 火星人
传送锚点:https://www.luogu.com.cn/problem/P1088 题目描述 人类终于登上了火星的土地并且见到了神秘的火星人.人类和火星人都无法理解对方的语言,但是我们的科学家发明 ...
- Android 13 - Media框架(15)- OpenMax(三)
关注公众号免费阅读全文,进入音视频开发技术分享群! 上一节学习了 media.codec 服务中的部分内容,这一节我们将一起了解 OMX IL 层的 API 以及相关的结构体等内容. 1.相关路径 以 ...
- nginx日志缓存open_log_file_cache
nginx日志缓存,提升磁盘性能 将多个日志进行积累,达到一定量级后写入到磁盘,可以减少磁盘旋转,从而降低磁盘i/o,提升nginx能效 语法: access_log path access_log ...