簡體   English   中英

在Spring-Boot項目中,Intellij中的Hottowap代碼熱銷嗎?

[英]Hot to HotSwap code in Intellij in a Spring-Boot project?

我正在將spring-boot-starter用於較大的服務器項目,該項目將打開一個靜態套接字進行通信。 對於總是不重新啟動服務器Intellij IDEA每次代碼更改后(並因此退出套接字連接),我想熱插拔的改變*的.java代碼。

我嘗試如下,但未成功:

  • 添加了Maven spring-boot-devtools依賴項
  • 設置> Build project automatically [yes]
  • 注冊表: complier.automake.allow.when.app.running [true]
  • 運行配置>更新策略: Update classes and resources

但是:每當我修改類時,我的應用程序都會自動重新啟動。 當然,這也將重新加載類,但隨后我也可以自行觸發重新啟動。 我沒有通過自動重啟獲得任何收益。

所以我通過spring.devtools.restart.enabled=false禁用了重啟。 但是,直到服務器重新啟動后,代碼交換才起作用。

但是,如果沒有顯式重新啟動,有可能嗎?

旁注:我不是要在瀏覽器中熱交換Web UI。 我只想重新加載Java代碼。

這就是Spring Boot開發工具的工作方式,每次更改都需要重新啟動,但是使用dev工具重新啟動要快得多,因為它使用了自定義類加載器:

Spring Boot提供的重啟技術通過使用兩個類加載器來工作。 不變的類(例如,來自第三方jar的類)將被加載到基類加載器中。 您正在積極開發的類將加載到重新啟動類加載器中。 重新啟動應用程序時,將丟棄重新啟動類加載器,並創建一個新的類加載器。 這種方法意味着應用程序的重啟通常比“冷啟動”要快得多,因為基本類加載器已經可用並已填充。

如果要熱交換代碼而不重新啟動,則一種選擇是使用JRebel Spring Boot文檔指出了相同的內容:

如果發現重新啟動對於您的應用程序來說不夠快,或者遇到類加載問題,則可以考慮從ZeroTurnaround重新加載技術,例如JRebel。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM