1. 程式人生 > >IDEA+DevTools實現熱部署功能

IDEA+DevTools實現熱部署功能

第三方jar包 瀏覽器刷新 文件加載 sta for tps 操作 RKE 設置

開發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熱部署集成就完成了。 補充說明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就會將該目錄列入了監聽範圍

IDEA+DevTools實現熱部署功能