一:熱加載與熱部署
熱部署的意思就是不用手動重啟環境,修改類后,項目會自動重啟。但是如果項目比較大,重啟也需要耗時十幾秒左右。
熱加載意為不需要重新啟動,修改了什么文件就重新加載什么文件,可以做到1,2秒左右就能看到效果。所以更節省時間。
但是二者是互有利弊。熱部署的好處是,重新啟動,不存在修改文件和整個環境不一致的情況,而且是任何修改都生效。但是這里的熱加載卻有限制。吾經過測試發現,至少在修改controller上方法的requestMapping時是不會馬上生效。因為這個是在啟動時就已經加載的,所以這也是熱加載修改什么加載什么帶來的必然結果。
注:本人使用的idea版本為2019.3.3
二:熱部署
熱部署網上有很多博客,基本可以說是四步。
1)修改build為自動編譯
2)允許運行時編譯:alt+ctrl+shift+/ 調出Registry,選中運行時編譯
3)添加pom依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
4)maven編譯插件
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <fork>true</fork> <addResources>true</addResources> </configuration> </plugin> </plugins> </build>
這種方式就是修改后會自動重新啟動,免去手工重啟。並不能實現不重啟而自動加載修改的類。
三:熱加載
要做到熱加載需要兩步。一是編譯,二是加載。吾經過測試整理出以下:
1)設置自動編譯,見2.1
2)設置運行運行時編譯,見2.2
3)設置手動“update”或者idea失去焦點時更新類與資源
4)以debug方式啟動
這樣就能實現修改了類后,手動點擊“update" 即idea下面的 刷新按鈕,或者點開另外個程序,idea就會重新去加載更新的類。這時馬上就能看到更新效果。(項目沒有重啟,但是會看到idea有一個刷新的動作)。這種方式的局限性前文已有說到。
吾測試時,有以下幾個坑。
a)當不以debug方式啟動時,設置允許自動編譯后,就算反編譯類,發現已經更改,就算去手動刷新(ctrl+F10)也不會起作用。我猜想是因為idea內置緩存的原因。所以必須以debug方式啟動。
四:結尾
正常的方式是,我們在開發一個功能后,才需要啟動項目。或者debug方式去調試問題。至於說熱部署和熱加載,哪種更適合你的特殊需要,就格取所好吧!