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》
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)