所謂的熱部署就是在你修改了后端代碼后不需要手動(dòng)重啟棉安,工具會(huì)幫你快速的自動(dòng)重啟是修改生效。其深層原理是使用了兩個(gè)ClassLoader拿诸,一個(gè)Classloader加載那些不會(huì)改變的類(lèi)(第三方Jar包)愧膀,另一個(gè)ClassLoader加載會(huì)更改的類(lèi)呛凶,稱(chēng)為restart ClassLoader,這樣在有代碼更改的時(shí)候灭抑,原來(lái)的restart ClassLoader 被丟棄十艾,重新創(chuàng)建一個(gè)restart ClassLoader,由于需要加載的類(lèi)相比較少腾节,所以實(shí)現(xiàn)了較快的重啟時(shí)間忘嫉。
1. 引入Spring-Boot-devtools
<!-- 引入熱部署依賴(lài) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>true</scope>
<optional>true</optional>
</dependency>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!-- 沒(méi)有該配置荤牍,devtools 不生效 -->
<fork>true</fork>
</configuration>
</plugin>
</plugins>
</build>
devtools會(huì)監(jiān)聽(tīng)classpath下的文件變動(dòng),并且會(huì)立即重啟應(yīng)用(發(fā)生在保存時(shí)機(jī))庆冕。
==注意:==
《fork》標(biāo)簽的作用不太確定康吵,有說(shuō)是:避免 devtools 傳遞性的被應(yīng)用到項(xiàng)目中其他的 module。
2. 熱部署生效
- 在配置文件application.yml中添加 :
spring:
devtools:
restart:
enabled: true #設(shè)置開(kāi)啟熱部署
freemarker:
cache: false #頁(yè)面不加載緩存访递,修改即時(shí)生效
-
在File >>> Settings >>> Build,Execution,Deployment >>> Compiler 中找到Build project automatically 并勾選晦嵌。
在這里插入圖片描述 - 用Ctrl+Shift+A 快捷鍵打開(kāi) Registry,點(diǎn)擊之后找到"compiler.automake.allow.when.app.running"拷姿,勾選惭载,【Close】關(guān)閉。
- 重啟IDEA即可响巢。
3. springboot提供的屬性
#----------------------------------------
#開(kāi)發(fā)人員屬性
#----- -----------------------------------
#DEVTOOLS(DevToolsProperties)
spring.devtools.add-properties = true #是否啟用開(kāi)發(fā)屬性默認(rèn)值描滔。
spring.devtools.livereload.enabled = true #是否啟用與livereload.com兼容的服務(wù)器。
spring.devtools.livereload.port = 35729 #服務(wù)器端口踪古。
spring.devtools.restart.additional-exclude = #應(yīng)當(dāng)從觸發(fā)完全重啟中排除的其他模式含长。
spring.devtools.restart.additional-paths = #監(jiān)視更改的其他路徑。
spring.devtools.restart.enabled = true #是否啟用自動(dòng)重啟灾炭。
spring.devtools.restart.exclude= Tests.class
spring.devtools.restart.log-condition-evaluation-delta = true #是否在重新啟動(dòng)時(shí)記錄條件評(píng)估增量茎芋。
spring.devtools.restart.poll-interval = 1s #等待兩次輪詢(xún)類(lèi)路徑更改之間的時(shí)間颅眶。
spring.devtools.restart.quiet-period = 400ms #觸發(fā)重新啟動(dòng)之前蜈出,無(wú)需對(duì)類(lèi)路徑進(jìn)行任何更改所需的安靜時(shí)間。
spring.devtools.restart.trigger-file =#更改后觸發(fā)重新啟動(dòng)檢查的特定文件的名稱(chēng)涛酗。如果未指定铡原,則任何類(lèi)路徑文件更改都會(huì)觸發(fā)重新啟動(dòng)。
#REMOTE DEVTOOLS(RemoteDevToolsProperties)
spring.devtools.remote.context-path = /商叹。~~ spring-boot燕刻!?#用于處理遠(yuǎn)程連接的上下文路徑。
spring.devtools.remote.proxy.host = #用于連接到遠(yuǎn)程應(yīng)用程序的代理主機(jī)剖笙。
spring.devtools.remote.proxy.port = #用于連接到遠(yuǎn)程應(yīng)用程序的代理的端口卵洗。
spring.devtools.remote.restart.enabled = true #是否啟用遠(yuǎn)程重啟。
spring.devtools.remote.secret = #建立連接所需的共享機(jī)密(啟用遠(yuǎn)程支持所必需)弥咪。
spring.devtools.remote.secret頭名= X-AUTH-TOKEN #用于傳輸共享密鑰的HTTP標(biāo)頭过蹂。
4. jrebel插件
livereload ,jrebel之類(lèi)的插件也可以聚至,但是個(gè)人感覺(jué)沒(méi)有devtools強(qiáng)大酷勺。