什么是熱部署洋魂?
- 熱部署,就是在應用正在運行的時候升級軟件肘习,卻不需要重啟應用际乘。
- 在平時編寫代碼的時候,常常會出現我們只是簡單把打印信息改變了漂佩,就需要重新部署脖含,如果要改變這樣的方式罪塔,就需要用到熱部署。
- 使用devtools這種方式可以實現大部分代碼的熱部署
認識spring-boot-devtools
- spring-boot-devtools 是一個為開發(fā)者服務的一個模塊养葵,其中最重要的功能就是自動應用代碼更改到最新的App上面去征堪。原理是在發(fā)現代碼有更改之后,重新啟動應用关拒,但是速度比手動停止后再啟動還要更快佃蚜,更快指的不是節(jié)省出來的手工操作的時間。
- 其深層原理是使用了兩個ClassLoader夏醉,一個Classloader加載那些不會改變的類(第三方Jar包)爽锥,另一個ClassLoader加載會更改的類,稱為 restart ClassLoader 畔柔,這樣在有代碼更改的時候氯夷,原來的restart ClassLoader 被丟棄,重新創(chuàng)建一個restart ClassLoader靶擦,由于需要加載的類相比較少腮考,所以實現了較快的重啟時間(5秒以內)。
使用方法
- 在項目中的pom.xml中plugin里添加依賴
<!-- spring boot devtools 依賴包 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
<scope>true</scope>
</dependency>
- build節(jié)點
<build>
<plugins>
<!-- 這是spring boot devtool plugin -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!-- 如果沒有該項配置devtools不會起作用-->
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>
-
開啟IDEA的自動構建功能玄捕,如下圖所示:
-
Intellij IEDA 使用ctrl+shi+a快捷鍵搜Registry踩蔚,選擇搜索出來的第一個如下圖,回車
-
勾選下圖中的complier.automake.allow.when.app.running
說明
- devtools會監(jiān)聽classpath下的文件變動枚粘,并且會立即重啟應用(發(fā)生在保存時機)馅闽,注意:因為其采用的虛擬機機制,該項重啟是很快的馍迄。
- devtools可以實現頁面熱部署(即頁面修改后會立即生效福也,這個可以直接在applicaon.properes文件中配置spring.thymeleaf.cache=false來實現(這里注意不同的模板配置不一樣)。
- 修改以下代碼都不需要重啟服務器:修改類攀圈、配置文件暴凑、頁面文件(原理是將spring.thymeleaf.cache設為false)之后ctrl+s:應用會重啟。