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 ...
随机推荐
- MQTT的使用一
MQTT:物联网消息传递标准 简介 MQTT是用于物联网(IoT)的OASIS标准消息传递协议.它被设计为一种非常轻量级的发布/订阅消息传送,非常适合以较小的代码占用量和最小的网络带宽连接远程设备.如 ...
- Mac远程控制工具有哪些
适用于Mac的远程控制工具有很多,这里我们给大家列举五个常用软件. 1.Apple Remote Desktop 苹果自带远程桌面正如其名称所承诺的那样.作为 Apple 出品的应用程序,您可以想象它 ...
- 2023最新nacos的windows 10安装(保姆级)
目录 前景提要 一.环境整合 构建工具(参考工具部署方式) 二.找到下载位置 1.在百度中找到下载地址.搜索nacos中文官网. 2.双击进入这个网站,看到首页找到下载位置. 3.进入git地址找到如 ...
- IDEA 2020 版配置VUE
找到IDE工具栏,就是启动项目的run那里 点击下拉框,找到Eidt Confiuration,选择 选择小加号 选取npm 设置npm页,完成后,点击apply run npm ,如图选择run或者 ...
- Hugging Face 与 Wiz Research 合作提高人工智能安全性
我们很高兴地宣布,我们正在与 Wiz 合作,目标是提高我们平台和整个 AI/ML 生态系统的安全性. Wiz 研究人员 与 Hugging Face 就我们平台的安全性进行合作并分享了他们的发现. W ...
- gpu机器没有开启ipv6
参考: https://blog.csdn.net/asdfaa/article/details/137884414 检查系统是否支持 IPv6,查看被禁用了 在启用 IPv6 之前,首先要确保您的系 ...
- 日常Bug排查-偶发性读数据不一致
日常Bug排查-偶发性读数据不一致 前言 日常Bug排查系列都是一些简单Bug的排查.笔者将在这里介绍一些排查Bug的简单技巧,同时顺便积累素材. Bug现场 业务场景 先描述这个问题出现的业务场景. ...
- rocketMQ 文章
10 DefaultMQPushConsumer 使用示例与注意事项.md (lianglianglee.com) 手动回滚事务: (29条消息) spring 控制事务回滚重要知识点:Transac ...
- Jenkins 项目构建平台
引言 Jenkins是一个开源的.提供友好操作界面的持续集成(CI)工具,主要用于持续.自动的构建/测试软件项目.监控外部任务的运行.Jenkins 用 Java 语言编写,可在 Tomcat 等流行 ...
- 记录一次由nginx配置引发出来的一系列的缓存问题
问题描述: 在做一个企业微信的移动端项目时,每次修改代码后并且打包.部署完毕,再次打开页面总是会有上一次的缓存,一开始以为是cookie和webStorage缓存导致的,然后每次清除还是有缓存,后来把 ...