即將介紹的兩種熱部署方式:
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
勾選目標的位置自己找找,排列順序不一樣,勾選后記得重啟生效!
四、設置自動加載資源配置和編譯
就此全部完成,有什么問題歡迎隨時留言,遠程協助~