支持JDK19虛擬線程的web框架,之二:完整開發一個支持虛擬線程的quarkus應用( 四 )

  • 至此,編碼完成
IDEA啟動設置
  • 編碼完成后,在IDEA上啟動應用做本地調試是咱們的基本操作,所以IDEA運行環境也要設置成支持JDK19的預覽特性
  • 打開入口類,點擊main方法前面的綠色箭頭,在彈出的菜單上選擇Modify Run Configuration

支持JDK19虛擬線程的web框架,之二:完整開發一個支持虛擬線程的quarkus應用

文章插圖
  • 在運行應用的設置頁面,如下操作

支持JDK19虛擬線程的web框架,之二:完整開發一個支持虛擬線程的quarkus應用

文章插圖
  • 選中Add VM options

支持JDK19虛擬線程的web框架,之二:完整開發一個支持虛擬線程的quarkus應用

文章插圖
  • 填入下圖箭頭所指的內容

支持JDK19虛擬線程的web框架,之二:完整開發一個支持虛擬線程的quarkus應用

文章插圖
  • 終于 , 設置完成,接下來要啟動應用了
啟動和驗證
  • 啟動應用之前,請確認postgresql數據庫已啟動,并且數據已經導入,具體啟動和導入方法請參考前文
  • 點擊下圖紅色箭頭中指向的按鈕,即可在IDEA中運行應用

支持JDK19虛擬線程的web框架,之二:完整開發一個支持虛擬線程的quarkus應用

文章插圖
  • 瀏覽器訪問地址:http://localhost:8080/vt/persons/1 ,如下圖,符合預期

支持JDK19虛擬線程的web框架,之二:完整開發一個支持虛擬線程的quarkus應用

文章插圖
  • 在前文中,咱們是在docker上運行應用的,另外在實際場景中應用運行在docker或者k8s環境也是普遍情況,所以接下來一起實戰將用做成docker鏡像并驗證
構建鏡像
  • 在創建工程的時候,IDEA就用quarkus模板自動創建了多個Dockerfile文件 , 下圖紅框中全是

支持JDK19虛擬線程的web框架,之二:完整開發一個支持虛擬線程的quarkus應用

文章插圖
  • 如果當前應用的JDK不是19,而是11或者17,那么上圖紅框中的Dockerfile文件就能直接使用了 , 然而,由于今天咱們應用的JDK必須是19,就無法使用這些Dockerfile了,必須自己寫一個,原因很簡單,打開Dockerfile.jvm , 如下圖紅色箭頭所示,基礎鏡像是jdk17,而這個倉庫中并沒有JDK19,也就是說quarkus還沒有發布JDK19版本的基礎鏡像,咱們要自己找一個 , 另外,容器啟動命令也要調整,需要加入--enable-preview才能開啟JVM的虛擬線程

支持JDK19虛擬線程的web框架,之二:完整開發一個支持虛擬線程的quarkus應用

文章插圖
  • 自己寫的Dockerile文件名為Dockerfile.19,內容如下,可見非常簡單:先換基礎鏡像,再把mvn構建結果復制過去,最后加個啟動命令就完事兒了(遠不如官方的分層構建節省空間,然而在官方的JDK19鏡像方案出來之前,先用下面這個將就著用吧)
FROM openjdk:19ENV LANGUAGE='en_US:en'# 執行工作目錄WORKDIR applicationCOPY --chown=185 target/*.jar ./RUN mkdir configEXPOSE 8080USER 185ENTRYPOINT ["java", "-jar", "--enable-preview", "quarkus-virual-threads-demo-1.0-SNAPSHOT-runner.jar"]
  • 接下來可以制作鏡像了 , 請確保自己電腦上docker已在運行
  • 首先是常規maven編譯打包(uber-jar表示生成的jar中包含了所有依賴庫)
mvn clean package -U -DskipTests -Dquarkus.package.type=uber-jar
  • 構建docker鏡像
docker build -f src/main/docker/Dockerfile.19 -t bolingcavalry/quarkus-virual-threads-demo:0.0.2 .
  • 鏡像制作成功,控制臺輸出如下圖

支持JDK19虛擬線程的web框架,之二:完整開發一個支持虛擬線程的quarkus應用

文章插圖
  • 如果您有hub.docker.com的賬號,也可以像我一樣推送到公共倉庫 , 方便大家使用
異常測試(沒有enable-preview參數會怎么樣?)
  • 回顧Dockerfile中啟動應用的命令,由于虛擬線程是JDK19的預覽功能,因此必須添加下圖紅色箭頭所指的--enable-preview參數才能讓虛擬線程功能生效

支持JDK19虛擬線程的web框架,之二:完整開發一個支持虛擬線程的quarkus應用

文章插圖
  • 于是我就在想:不加這個參數會咋樣?也就是不開啟虛擬線程,但是代碼中卻要用它,那么真正運行的時候會如何呢?
  • 瞎猜是沒用的,還是試試吧,在啟動參數中刪除--enable-preview , 如下圖,再重新構建鏡像

支持JDK19虛擬線程的web框架,之二:完整開發一個支持虛擬線程的quarkus應用

文章插圖
  • 像前文那樣運行容器(再次提醒,確保數據庫是正常的) , 再在瀏覽器訪問http://localhost:8080/vt/persons/1,頁面正常顯示了 , 看來功能是不受影響的

支持JDK19虛擬線程的web框架,之二:完整開發一個支持虛擬線程的quarkus應用

推薦閱讀