Idea環境實現SpringBoot實現兩種熱部署方式(親測有效)
阿新 • • 發佈:2019-11-20
即將介紹的兩種熱部署方式:
1.SpringLoaded
2.DevTools
區別:
SpringLoader:SpringLoader 在部署專案時使用的是熱部署的方式。
DevTools:DevTools 在部署專案時使用的是重新部署的方式
SpringBoot版本:2.1.9-RELEASE
IDEA版本:2019.2.4
熱部署
大家都知道在專案開發過程中,常常會改動頁面資料或者修改資料結構,為了顯示改動效果,往往需要重啟應用檢視改變效果,其實就是重新編譯生成了新的Class檔案,這個檔案裡記錄著和程式碼等對應的各種資訊,然後Class檔案將被虛擬機器的ClassLoader載入。
而熱部署正是利用了這個特點,它監聽到如果有Class檔案改動了,就會建立一個新的ClaassLoader進行載入該檔案,經過一系列的過程,最終將結果呈現在我們眼前。
類載入機制
Java中的類經過編譯器可以把程式碼編譯為儲存位元組碼的Class檔案,該Class檔案儲存了各種資訊,最終要載入到虛擬機器中執行使用。
虛擬機器把描述類的資料從Class檔案載入到記憶體中,並對資料進行校驗、轉換解析和初始化,最終形成可以被虛擬機器直接使用的Java型別。
SpringLoaded 實現熱部署方式:
缺陷:不會載入靜態資源,只加載類檔案,也就是隻熱部署載入class
1.到mvn倉庫下載jar包
下載後記住這個jar包的絕對路徑。接下來會用到
2.配置SpringBoot的啟動引數配置
在VMOptions裡面新增 -javaagent:jar包路徑 -noverify
3.以Debug模式進行啟動,再更改程式碼後會自動更新classes檔案,至此完成。
DevTools實現熱部署方式(自重啟)
在激活了開發者工具後,ClassPath裡對檔案做任何修改都會觸發應用程式重啟。為了讓重啟的速度夠快,不會修改的類(第三方JAR包)都載入到了基礎類載入器裡,而應用程式的程式碼則會載入到一個單獨的重啟類載入器裡。檢測到變更時,只會重啟類載入 器重啟。
有些ClassPath裡的資源變更後不需要重啟應用程式。像Thymeleaf這樣的檢視模板可以直接編輯,不用重啟。在/static 或 /public裡的靜態資源也不用重啟應用程式,所以Spring Boot開發者工具在重啟時排除掉了如下目錄:/META-INF/resources、/resources、/static、/public、/templates。
一、pom依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> <!-- optional目的是為了繼承他的專案不繼承這個devtools外掛 --> </dependency><build> <plugins> <plugin> <!--熱部署配置--> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!--fork:如果沒有該項配置,整個devtools不會起作用(根據個人情況而定,最好加上)--> <fork>true</fork> </configuration> </plugin> </plugins> </build>
二、勾選Build project automatically(自動構建)
三、IDEA 設定為在程式執行過程中,依然允許自動編譯
步驟: ctrl + shift + alt + /,選擇Registry,勾選勾上 Compiler autoMake allow when app running
勾選目標的位置自己找找,排列順序不一樣,勾選後記得重啟生效!
四、設定自動載入資源配置和編譯
就此全部完成,有什麼問題歡迎隨時留言,遠端協助~
&n