本地開發(fā)過程中误阻,一個小小的功能變化,測試的時候晴埂,都需要重啟應(yīng)用究反,這樣啟動項目的時間,可能比改動需要的時間還多儒洛,springboot的熱部署精耐,就幫我們解決了,頻繁的啟動項目所花費(fèi)的時間琅锻。
熱部署的原理是使用了兩個ClassLoader卦停,一個Classloader加載那些不會改變的類(第三方Jar包)向胡,另一個ClassLoader加載會更改的類,稱為restart ClassLoader,這樣在有代碼更改的時候惊完,原來的restart ClassLoader 被丟棄僵芹,重新創(chuàng)建一個restart ClassLoader,由于需要加載的類相比較少小槐,所以實(shí)現(xiàn)了較快的重啟時間
springboot熱部署主要步驟如下:
添加相關(guān)的依賴包和插件
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>
說明:
(1) devtools可以實(shí)現(xiàn)頁面熱部署(即頁面修改后會立即生效拇派,這個可以直接在application.properties文件中配置spring.thymeleaf.cache=false來實(shí)現(xiàn)),
實(shí)現(xiàn)類文件熱部署(類文件修改后不會立即生效)凿跳,實(shí)現(xiàn)對屬性文件的熱部署件豌。
即devtools會監(jiān)聽classpath下的文件變動,并且會立即重啟應(yīng)用(發(fā)生在保存時機(jī))拄显,注意:因?yàn)槠洳捎玫奶摂M機(jī)機(jī)制苟径,該項重啟是很快的
(2)配置了后在修改java文件后也就支持了熱啟動,不過這種方式是屬于項目重啟(速度比較快的項目重啟)躬审,會清空session中的值棘街,也就是如果有用戶登陸的話,項目重啟后需要重新登陸承边。
默認(rèn)情況下遭殉,/META-INF/maven,/META-INF/resources博助,/resources险污,/static,/templates富岳,/public這些文件夾下的文件修改不會使應(yīng)用重啟蛔糯,但是會重新加載(devtools內(nèi)嵌了一個LiveReload server,當(dāng)資源發(fā)生改變時窖式,瀏覽器刷新)蚁飒。
IDEA配置
當(dāng)我們修改了Java類后,IDEA默認(rèn)是不自動編譯的萝喘,而spring-boot-devtools又是監(jiān)測classpath下的文件發(fā)生變化才會重啟應(yīng)用淮逻,所以需要設(shè)置IDEA的自動編譯:
(1)File-Settings-Compiler-Build Project automatically
(2)ctrl + shift + alt + /,選擇Registry,勾上 Compiler autoMake allow when app running
IDEA配置
當(dāng)我們修改了Java類后,IDEA默認(rèn)是不自動編譯的阁簸,而spring-boot-devtools又是監(jiān)測classpath下的文件發(fā)生變化才會重啟應(yīng)用爬早,所以需要設(shè)置IDEA的自動編譯:
(1)File-Settings-Compiler-Build Project automatically
(2)ctrl + shift + alt + /,選擇Registry,勾上 Compiler autoMake allow when app running