springboot提供了熱部署,所謂熱部署就是當你修改了代碼,不用重新啟動服務器部署應用,而你只要重新編譯一下當前項目,修改的代碼就自動生效了,這樣極大的節省了部署應用時間,對於開發體驗還是有很大提升的,因為我們不用一修改了代碼就部署應用,因為部署應用也是會花費很長時間的。在idea中點擊如下按鈕:

一、springboot的熱部署的兩種方式
一種是利用SpringLoader插件,另一種是使用DevTools工具。
1、第一種使用SpringLoader插件
在pom.xml文件中導入如下插件:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
<version>1.2.8.RELEASE</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
然后以spring-boot:run命令的方式啟動應用。
springLoader的缺陷:springLoader只對java代碼進行熱部署處理,無法實時更新頁面,也就是說它對頁面無能為力。
注意:這種方式的缺點是springLoader熱部署程序是在系統后台以進程的形式來運行的,當第二次運行時會報端口占用的異常,因此需要手動關閉該進程。關閉如下圖所示進程:

2、第二種使用DevTools工具
修改pom.xml文件,添加如下依賴:
<!-- springBoot devtools的熱部署 修改代碼之后需要重新編譯一下即可 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
熱部署插件的原理:主要有兩個類加載器:base classloader 和restart classloader。
base classloader用於加載那些不會變化的類,例如各種第三方依賴,而restart classloader用來加載那些變化的類,例如你修改了的類。
springboot中熱部署的原理:當代碼發生了變化時,base classloader不變,restart classloader被廢棄了,被另一個restart classloader替代了。在整個過程中只是加載了變化了的類而不是全部重新加載,所以速度會更快。devtools中默認嵌入了livereload服務器,利用它可以實現靜態資源的熱部署。LiveReload可以在靜態資源發生變化時自動觸發瀏覽器更新,它支持Chrome、Firefox以safari。它就是一個插件只需要在Chrome瀏覽器或者Firefox瀏覽器添加一個插件就可以了。LiveReload是和瀏覽器的選項卡綁定在一起的,在哪個選項卡打開就在哪個選項卡生效。如果安裝並且啟動了LiveReload插件但是又不想使用則可以在springboot配置文件中添加spring.devtools.livereload.enabled=false即可關閉靜態資源的熱部署加。
三、SpringLoader與DevTools的區別
SpringLoader在部署項目時使用的是熱部署的方式,而DevTools在部署項目時使用的是重新部署的方式。
