SpringBoot(六):springboot熱部署

在j2ee項目開發中,熱部署插件是JRebel。JRebel的使用爲開發人員帶來了極大的幫助,且挺高了開發便捷。而在SpringBoot開發生態環境中,SpringBoot熱部署經常使用插件是:spring-boot-devtools。下邊將會學習devtools的用法。java

注意:springboot不僅支持devtools熱部署插件,還支持springloaded方式。spring

如何使用spring-boot-devtools?

須要在springboot的pom.xml中引入:瀏覽器

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
    </dependency>

如何驗證spring-boot-devtools起效?

當啓動springboot工程後,繼續修改代碼,在不從新手動啓動springboot工程的狀況下,編譯修改的代碼,驗證是否起效。springboot

1)在springboot工程中,新建一個HelloWordController.java控制類,在控制類中打印「hello-word」服務器

2)運行springboot入口方法,來啓動springboot工程,並在瀏覽器中瀏覽地址http://localhost:8080/index,查看打印信息。app

SpringBoot入口函數類:ide

import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.context.annotation.ComponentScan; @ComponentScan("com.dx.controller") @EnableAutoConfiguration public class ApplicationStarter { public static void main(String[] args) { SpringApplication.run(ApplicationStarter.class, args); } }

運行main函數,成功啓動了springboot工程,以後瀏覽器訪問http://localhost:8080後,控制檯打印了「hello word」信息。函數

3)修改HelloWordController.java:把打印內容修改成「hello-springboot」,並編譯「」該控制類,在瀏覽器中(不重啓springboot服務器的狀況下)訪問http://localhost:8080/index,查看控制檯打印信息。此時發現打印信息依然是「hello word」,並未自動編譯。spring-boot

4)在工程pom.xml追加「spring-boot-devtools」依賴,並把HelloWordController.java打印信息修改回爲「hello word」,在瀏覽器中訪問http://localhost:8080/index,此時控制檯打印信息爲「hello word」。學習

5)修改HelloWordController.java:把打印內容修改成「hello-springboot」,並編譯「」該控制類,在瀏覽器中(不重啓springboot服務器的狀況下)訪問http://localhost:8080/index,查看控制檯打印信息。此時發現打印信息依然是「hello springboot」,這就說明熱部署已經起效。

spring-boot-devtools原理:

深層原理是使用了兩個ClassLoader,一個Classloader加載那些不會改變的類(第三方Jar包),另外一個ClassLoader加載會更改的類,稱爲restart ClassLoader,這樣在有代碼更改的時候,原來的restart ClassLoader 被丟棄,從新建立一個restart ClassLoader,因爲須要加載的類相比較少,因此實現了較快的重啓時間。

注意:這裏邊若是是類發生了變化,是發生了較快的重啓,而不是不重啓springboot服務。

spring-boot-devtools參數配置:

1)排除資源與包括資源:

在applicaiton.properties中添加配置:

spring.devtools.restart.exclude=static/**,templates/** spring.devtools.restart.additional-exclude=public/** (處理默認配置排除以外的) spring.devtools.restart.enabled=false (禁止自動重啓)

2)可使用trigger.file的重啓策略:

在applicaiton.properties中添加配置:

spring.devtools.restart.triggerFile=trigger.file

注意:這個文件不要放到default_excludes目錄下,通常狀況下放到resources文件下。

IDEA配置實現Ctrl+S保存後自動編譯:

Eclipse默認自動編譯,而idea默認手動編譯,所以idea須要修改兩個參數以達到任意時間自動編譯的目的。

1)IDEA下File-Settings-Compiler-Build Project automatically(注意後面only works not running/debugging,因此要實現熱部署就必須打破這個限制,因而乎有了下面設置)

2)ctrl + shift + alt + /,選擇Registry,勾上 Compiler autoMake allow when app running

測試

  • 修改類–>保存:應用會重啓
  • 修改配置文件–>保存:應用會重啓
  • 修改頁面–>保存:應用不會重啓,但會從新加載,頁面會刷新(原理是將spring.thymeleaf.cache設爲false,參考:Spring Boot配置模板引擎)
相關文章
相關標籤/搜索