幕布:https://mubu.com/edit/AnWG1QWGC0
什么是熱部署礁竞?
熱部署焕刮,就是在應(yīng)用正在運(yùn)行的時(shí)候升級(jí)軟件,卻不需要重啟應(yīng)用嘶朱。
在平時(shí)編寫代碼的時(shí)候,常常會(huì)出現(xiàn)我們只是簡(jiǎn)單把打印信息改變了光酣,就需要重新部署疏遏,如果要改變這樣的方式,就需要用到熱部署救军。
使用devtools這種方式可以實(shí)現(xiàn)大部分代碼的熱部署
認(rèn)識(shí)spring-boot-devtools
spring-boot-devtools是一個(gè)為開發(fā)者服務(wù)的一個(gè)模塊财异,其中最重要的功能就是自動(dòng)應(yīng)用代碼更改到最新的App上面去。原理是在發(fā)現(xiàn)代碼有更改之后唱遭,重新啟動(dòng)應(yīng)用戳寸,但是速度比手動(dòng)停止后再啟動(dòng)還要更快,更快指的不是節(jié)省出來(lái)的手工操作的時(shí)間胆萧。
其深層原理是使用了兩個(gè)ClassLoader庆揩,一個(gè)Classloader加載那些不會(huì)改變的類(第三方Jar包),另一個(gè) ClassLoader加載會(huì)更改的類跌穗,稱為 restart ClassLoader 订晌,這樣在有代碼更改的時(shí)候,原來(lái)的restart ClassLoader 被丟棄蚌吸,重新創(chuàng)建一個(gè)restart ClassLoader锈拨,由于需要加載的類相比較少,所以實(shí)現(xiàn)了較快的重啟時(shí)間(5秒以內(nèi))羹唠。
使用方法
在項(xiàng)目中的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é)點(diǎn)
<build> ? ?<plugins> ? ? ? ?<!-- 這是spring boot devtool plugin --> ? ? ? <plugin> ? ? ? ? ?<groupId>org.springframework.boot</groupId> ? ? ? ? ?<artifactId>spring-boot-maven-plugin</artifactId> ? ? ? ? ? ?<configuration>
<!-- 如果沒有該項(xiàng)配置devtools不會(huì)起作用--> ? ? ? ? ? ? <fork>true</fork> ? ? ? ? ?</configuration> ? ? ? </plugin> ? ?</plugins> </build>
開啟IDEA的自動(dòng)構(gòu)建功能奕枢,如下圖所示:
File-->Settings-->Build,Executing.Deployment-->Compoler-->Build project automatically 打鉤
Intellij IEDA 使用ctrl+shi+a 快捷鍵搜索Registry娄昆,選擇搜索出來(lái)的第一個(gè)如下圖,回車
勾選下圖中的complier.automake.allow.when.app.running
配置完成缝彬,重新啟動(dòng)項(xiàng)目可以試著修改代碼萌焰,熱部署成功,也加快了開發(fā)速度谷浅。
說(shuō)明
devtools會(huì)監(jiān)聽classpath下的文件變動(dòng)扒俯,并且會(huì)立即重啟應(yīng)用(發(fā)生在保存時(shí)機(jī)),注意:因?yàn)槠洳捎玫奶摂M機(jī)機(jī)制一疯,該項(xiàng)重啟是很快的撼玄。?
devtools可以實(shí)現(xiàn)頁(yè)面熱部署(即頁(yè)面修改后會(huì)立即生效,這個(gè)可以直接在applicaon.properes文件中配置 spring.thymeleaf.cache=false來(lái)實(shí)現(xiàn)(這里注意不同的模板配置不一樣)墩邀。
修改以下代碼都不需要重啟服務(wù)器:修改類掌猛、配置文件、頁(yè)面文件(原理是將spring.thymeleaf.cache設(shè)為false)之后ctrl+s:應(yīng)用會(huì)重啟眉睹。