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。
 
一、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熱部署集成就完成了。
 
  • 默認情況下,/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就會將該目錄列入了監聽范圍


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM