在SpringBoot中使用熱部署(DevTools)


1、簡介

  有時候咱們開發完SpringBoot項目後,啓動運行。可是常常發現代碼須要反覆修改,而後修改部份內容後須要再啓動,這樣太費時了,熱部署就是用來解決這一問題。讓你修改完代碼後,能自動執行編譯並運行。java


2、使用SpringBoot的devtools實現熱部署

Devtools的原理

  深層原理是使用了兩個ClassLoader,一個Classloader加載那些不會改變的類(第三方Jar包),另外一個ClassLoader加載會更改的類,稱爲restart ClassLoader,這樣在有代碼更改的時候,原來的restart ClassLoader 被丟棄,從新建立一個restart ClassLoader,因爲須要加載的類相比較少,因此實現了較快的重啓時間。
  spring-boot-devtools 是一個爲開發者服務的一個模塊,其中最重要的功能就是熱部署。該模塊在完整的打包環境下運行的時候會被禁用。若是你使用 java -jar啓動應用或者用一個特定的 classloader 啓動,它會認爲這是一個「生產環境」。

spring

1.修改pom文件

加入spring-boot-devtools依賴和spring-boot-maven-plugin插件springboot

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

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <fork>true</fork>
            </configuration>
        </plugin>
    </plugins>
</build>


2.修改idea配置

當咱們修改了Java類後,IDEA默認是不自動編譯的,而spring-boot-devtools又是監測classpath下的文件發生變化纔會重啓應用,因此須要設置IDEA的自動編譯。app

(1)依次點開菜單 【File】->【Settings】->【Build,Execution,Deployment】->【Compiler】: 勾選右側的【Build project automatically】maven

(2)按下Ctrl+Shift+A,打開搜索,輸入registry,並打開搜索到的該項設置ide

(3)找到compiler.automake.allow.when.app.running項,並打勾spring-boot

(4)重啓IDEA測試


3.修改項目配置文件 (可忽略)

在application.properties中配置spring.devtools.restart.enabled=false,此時restart類加載器還會初始化,但不會監視文件更新。在SprintApplication.run以前調用System.setProperty("spring.devtools.restart.enabled", "false");能夠徹底關閉重啓支持。ui

#熱部署生效
spring.devtools.restart.enabled: true
#設置重啓的目錄
spring.devtools.restart.additional-paths: src/main/java
#classpath目錄下的WEB-INF文件夾內容修改不重啓
spring.devtools.restart.exclude: WEB-INF/**

注:關於devtools能夠自定義不少屬性,達到自定義效果。idea


4.測試

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