![](/img/trans.png)
[英]IntelliJ Process finished with exit code 0 when spring-boot run
[英]Hot to HotSwap code in Intellij in a Spring-Boot project?
我正在將spring-boot-starter
用於較大的服務器項目,該項目將打開一個靜態套接字進行通信。 對於總是不重新啟動服務器Intellij IDEA
每次代碼更改后(並因此退出套接字連接),我想熱插拔的改變*的.java代碼。
我嘗試如下,但未成功:
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.