IDEA+DevTools實現熱部署功能

 
開發IDE: Intellij IDEA 2018.1 SpringBoot:1.5.9.RELEASE
熱部署
  你們都知道在項目開發過程當中,經常會改動頁面數據或者修改數據結構,爲了顯示改動效果,每每須要重啓應用查看改變效果,其實就是從新編譯生成了新的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。
 
1、POM集成

下面這一步,我本身測試發現是不須要設置的。可是有網友說須要設置才生效,這個看我的狀況,酌情設置。spring

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
 
2、IDEA工具啓動自動編譯功能
3、IDEA 設置爲在程序運行過程當中,依然容許自動編譯
操做: ctrl + shift + alt + /,選擇Registry,勾選勾上 Compiler autoMake allow when app running
 
執行完上述的操做步驟後,咱們的devtools熱部署集成就完成了。
 
  • 默認狀況下,/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就會將該目錄列入了監聽範圍
相關文章
相關標籤/搜索