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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM