1、前言
- 每次修改完java文件或者thmeleaf模版文件後,須要從新編譯 rebuild 才能生效,這就顯得很麻煩了。
- spring爲開發者提供了一個名爲spring-boot-devtools的模塊來使Spring Boot應用支持熱部署,提升開發者的開發效率,無需手動重啓Spring Boot應用。
- spring-boot-devtools是一個爲開發者服務的一個模塊,其中最重要的功能就是自動應用代碼更改到最新的App上面去。
- 原理是在發現代碼有更改以後,從新啓動應用,可是速度比手動中止後再啓動更快。
- 其深層原理是使用了兩個ClassLoader,一個Classloader加載那些不會改變的類(第三方Jar包),另外一個ClassLoader加載會更改的類,稱爲restart ClassLoader,這樣在有代碼更改的時候,原來的restart ClassLoader被丟棄,從新建立一個restart ClassLoader,因爲須要加載的類相比較少,因此實現了較快的重啓時間。
- 即devtools會監聽classpath下的文件變更,而且會當即重啓應用(發生在保存時機)
2、IDEA自動編譯設置
- File-Settings-Compiler-Build Project automatically
- ctrl + shift + alt + /,選擇Registry,勾上 Compiler autoMake allow when app running
- compile.document.save.trigger.delay -> 自動更新文件, 它主要是針對靜態文件如JS CSS的更新,將延遲時間減小後,直接按F5刷新頁面就能看到效果!
- 頂部菜單- >Edit Configurations->SpringBoot插件->目標項目->勾選熱更新
3、pom.xml中添加熱部署依賴及application.proerties配置
-
在dependency中添加devtools依賴html
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
<scope>runtime</scope>
</dependency>
-
plugin中配置configurationjava
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!--如下fork爲true必須添加-->
<configuration>
<fork>true</fork>
<addResources>true</addResources>
</configuration>
</plugin>
</plugins>
</build>
- 在application.properties中配置spring.devtools.restart.enabled=false,此時restart類加載器還會初始化,但不會監視文件更新。
- 在SprintApplication.run以前調用System.setProperty(「spring.devtools.restart.enabled」, 「false」);能夠徹底關閉重啓支持
-
配置內容:spring
#熱部署生效
spring.devtools.restart.enabled=true
#設置重啓的目錄
#spring.devtools.restart.additional-paths: src/main/java
#classpath目錄下的WEB-INF文件夾內容修改不重啓
spring.devtools.restart.exclude: WEB-INF/**
4、測試
- 修改類–>保存:應用會重啓
- 修改配置文件–>保存:應用會重啓
- 修改頁面–>保存:應用不會重啓,但會從新加載,頁面會刷新(原理是將spring.thymeleaf.cache設爲false,參考:Spring Boot配置模板引擎)
5、參考連接
https://liuyanzhao.com/7105.html
https://www.cnblogs.com/lspz/...app
6、IDEA+Springboot+JRebel插件熱部署實現
- 除了使用devtools實現熱部署功能,還能夠安裝JRebel插件來實現熱部署
- 參考連接:
https://www.jianshu.com/p/bdc...
https://www.cnblogs.com/code-...
https://www.cnblogs.com/qwang...
- JReble插件激活破解方式:
https://blog.csdn.net/xingbao...