### 歡迎訪問我的GitHub > 這裡分類和彙總了欣宸的全部原創(含配套源碼):[https://github.com/zq2599/blog_demos](https://github.com/zq2599/blog_demos) ### 本篇概覽 - 前文咱們曾提到過幾種啟動方式,有一種用m ...
歡迎訪問我的GitHub
這裡分類和彙總了欣宸的全部原創(含配套源碼):https://github.com/zq2599/blog_demos
本篇概覽
- 前文咱們曾提到過幾種啟動方式,有一種用maven命令啟動的,可以進入開發模式,命令如下:
mvn quarkus:dev
- 當時只提到此模式能看到詳細系統信息,並未展開說明更多信息,實際上,此模式下還有很多實用的功能
- 作為《quarkus實戰》系列的第三篇,今天咱們一起來學習開發模式(Development mode),這是quarkus為開發者準備的實用工具
關於開發模式(Development mode)
- 開發模式是quarkus框架提供的內置工具(built-in),可直接使用
- 開發模式提供以下功能:
- 系統信息:即前文提到過的,查看對象和配置、修改配置、操作單元測試等功能
- 熱部署:修改java代碼、資源文件、配置文件等類型的文件後,會立即生效
- 斷點:這是常用功能就不多說了,稍後直接操作
- 接下來實際體驗上述功能,用的是《quarkus實戰之二:體驗HelloWorld》一文中創建的demo工程
系統信息
- 訪問http://localhost:8080/q/dev/,可以看到豐富的系統信息,該地址只在dev模式有效:
熱部署
- 熱部署是日常開發的常用功能,回顧demo中的HobbyResource.java,如下所示,非常簡單:
package com.bolingcavalry;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import java.time.LocalDateTime;
@Path("/actions")
public class HobbyResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "Hello RESTEasy " + LocalDateTime.now();
}
}
- 為了演示修改配置可以立即生效的效果,把代碼改成下麵這樣,註意註解ConfigProperty的作用是將指定配置的值註入修飾的成員變數中:
package com.bolingcavalry;
import org.eclipse.microprofile.config.inject.ConfigProperty;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import java.time.LocalDateTime;
@Path("/actions")
public class HobbyResource {
@ConfigProperty(name = "greeting.message")
String message;
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "Hello RESTEasy " + LocalDateTime.now() + " " + message;
}
}
- 打開文件application.properties,增加一個配置:
# 這是一個自定義屬性
greeting.message=message from configuration
- 用命令mvn quarkus:dev將應用以開發模式啟動,用瀏覽器訪問http://localhost:8080/actions,響應如下圖,符合預期,配置的屬性可以被正常使用:
- 現在去修改代碼,如下圖紅框:
- 再把文件application.properties中的配置也改了,我這裡改成了abcdef
- 再去刷新頁面,如下圖所示,代碼和配置的修改都生效了:
- 以上就是熱部署了,接下來去看另一個實用的功能:斷點
斷點
-
打斷點、單步調試等都是Java程式員的日常操作,就不做介紹了,直接聊聊quarkus上如何操作吧
-
在開發模式下,斷點功能是預設開啟的,不過為了安全起見,quarkus斷點只監聽了localhost網卡,埠是5005
-
在代碼中打個斷點,如下圖,我這裡用的是IDEA:
- 在IDEA上新增一個斷點,操作如下圖:
-
如下圖所示,確認埠號正確:
-
配置完成後,點擊下圖紅框中的按鈕即可發起斷點請求:
-
如果應用正常監聽,應該能立即連接成功,如下圖:
-
刷新瀏覽器,請求會立即停留在斷點位置,一切都是熟悉的樣子,可以像以前一樣查看變數和堆棧,也可以做單步執行和條件斷點等操作:
-
以上是通過localhost:5005進行本地調試的操作步驟,如果另外一臺電腦想連接到到這個quarkus應用進行遠程調式,是連接不成功的,因為quarkus應用啟動後監聽的是localhost這塊網卡,為了能夠讓其他電腦上的IDEA遠程連接到這個應用,我們需要給啟動命令增加一個參數,令其監聽本機所有網卡,支持遠程debug的完整啟動命令如下,另外,debug參數可以指定埠:
mvn quarkus:dev -DdebugHost=0.0.0.0 -Ddebug=5006
- 啟動後控制台輸出信息如下圖,紅框中顯示監聽的埠是5006:
- 當前電腦的IP是192.168.50.221,所以將斷點的地址從localhost:5005改為192.168.50.221:5006,如下圖:
- 再嘗試連接斷點,如下所示,新的IP+埠連接成功:
- 因為連接是基於IP+埠的,您完全可以在A電腦上運行應用,在B電腦上用IDEA遠程連接A電腦進行斷點操作
熱部署的局限性
- 前面的操作:在A電腦用mvn quarkus:dev -DdebugHost=0.0.0.0 -Ddebug=5006命令啟動應用,在B電腦上用IDEA連接到A電腦上進行熱部署操作,雖然也算是遠程,但聰明的您應該看出了弊端:A電腦上必須有源碼
- 很多時候,我們熱部署是為了處理特定問題,而出現問題的電腦可能是測試環境,甚至生產環境,這些地方是不會有源碼和maven的,此時mvn quarkus:dev命令就行不通了,那又該如何處理呢?放棄熱部署的便利,只能改一次代碼部署一次嗎?
- 好在quarkus已經考慮到這種情況,為我們準備了遠程熱部署方案,下一篇文章會詳細介紹和操作