在前面的文章《嘗試官方的第一個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》