【經典】IDEA+DevTools熱部署

IDEA+DevTools實現熱部署功能

熱部署

  大家都知道在項目開發過程中,常常會改動頁面數據或者修改數據結構,爲了顯示改動效果,往往需要重啓應用查看改變效果,其實就是重新編譯生成了新的Class文件,這個文件裏記錄着和代碼等對應的各種信息,然後Class文件將被虛擬機的ClassLoader加載。

而熱部署正是利用了這個特點,它監聽到如果有Class文件改動了,就會創建一個新的ClaassLoader進行加載該文件,經過一系列的過程,最終將結果呈現在我們眼前。

 

類加載機制

  Java中的類經過編譯器可以把代碼編譯爲存儲字節碼的Class文件,該Class文件存儲了各種信息,最終要加載到虛擬機中運行使用。

  類加載機制(摘自《深入理解 Java 虛擬機》)

  虛擬機把描述類的數據從Class文件加載到內存中,並對數據進行校驗、轉換解析和初始化,最終形成可以被虛擬機直接使用的Java類型。

 

spring-boot-devtools 自動重啓(熱部署)

  在激活了開發者工具後,ClassPath裏對文件做任何修改都會觸發應用程序重啓。爲了讓重啓的速度夠快,不會修改的類(第三方JAR包)都加載到了基礎類加載器裏,而應用程序的代碼則會加載到一個單獨的重啓類加載器裏。檢測到變更時,只會重啓類加載 器重啓。

  有些ClassPath裏的資源變更後不需要重啓應用程序。像Thymeleaf這樣的視圖模板可以直接編輯,不用重啓。在/static 或 /public裏的靜態資源也不用重啓應用程序,所以Spring Boot開發者工具在重啓時排除掉了如下目錄:/META-INF/resources、/resources、/static、/public、/templates。

 

一、POM集成

下面這一步,我自己測試發現是不需要設置的。但是有網友說需要設置才生效,這個看個人情況,酌情設置。

configuration.fork : Flag to indicate if the run processes should be forked. {@code fork} is

automatically enabled if an agent, jvmArguments or working directory are specified,

or if devtools is present

 

二、IDEA工具啓動自動編譯功能

三、IDEA 設置爲在程序運行過程中,依然允許自動編譯

操作: ctrl + shift + alt + /,選擇Registry,勾選勾上 Compiler autoMake allow when app running

 

執行完上述的操作步驟後,我們的devtools熱部署集成就完成了。

 

補充說明:https://blog.csdn.net/songhaifengshuaige/article/details/54137275

  • 默認情況下,/META-INF/maven,/META-INF/resources,/resources,/static,/templates,/public這些文件夾下的文件修改不會使應用重啓,但是會重新加載(devtools內嵌了一個LiveReload server,當資源發生改變時,瀏覽器刷新)。
  • 如果想改變默認的設置,可以自己設置不重啓的目錄:spring.devtools.restart.exclude=static/**,public/**,這樣的話,就只有這兩個目錄下的文件修改不會導致restart操作了。
  • 如果要在保留默認設置的基礎上還要添加其他的排除目錄:spring.devtools.restart.additional-exclude
  • 如果想要使得當非classpath下的文件發生變化時應用得以重啓,使用:spring.devtools.restart.additional-paths,這樣devtools就會將該目錄列入了監聽範圍
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章