1. 程式人生 > >SPringBoot 配置相關熱啟動

SPringBoot 配置相關熱啟動

配置熱部署

熱部署是什麼

熱部署監聽到如果有Class檔案改動了,就會建立一個新的ClaassLoader進行載入該檔案,經過一系列的過程,最終將結果呈現在我們眼前。

Spring Boot實現熱部署

Spring Boot實現熱部署有如下方式:

Spring Loaded

這種方式是以Maven外掛的形式去載入,所以啟動時使用通過Maven命令mvn spring-boot:run啟動,而通過Application.run方式啟動的會無效,因為通過應用程式啟動時,已經繞開了Maven外掛機制。

POM整合方式:

複製程式碼

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <dependencies>
                <dependency>
                    <groupId>org.springframework</groupId>
                    <artifactId>springloaded</artifactId>
                    <version>1.2.5.RELEASE</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

複製程式碼

spring-boot-devtools

這種方式無論怎麼啟動應用,都可以達到修改檔案後重啟應用。

POM整合方式:

<!-- 熱部署模組 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional> <!-- 這個需要為 true 熱部署才有效 -->
</dependency>

整合注意:

1、如果發現沒有熱部署效果,則需要檢查IDE配置中有沒有開啟自動編譯。

ctrl+alt+s:勾選build project automatically

ctrl+alt+shift+/:搜尋run,勾選complier.automake.allow.when.app.running

2、如果使用Thymeleaf模板引擎,需要把模板預設快取設定為false

#禁止thymeleaf快取(建議:開發環境設定為false,生成環境設定為true)
spring.thymeleaf.cache=false

3、針對devtools的可以指定目錄或者排除目錄來進行熱部署

#新增那個目錄的檔案需要restart
spring.devtools.restart.additional-paths=src/main/java
#排除那個目錄的檔案不需要restart
spring.devtools.restart.exclude=static/**,public/**

4、預設情況下,/META-INF/maven,/META-INF/resources,/resources,/static,/templates,/public這些資料夾下的檔案修改不會使應用重啟,但是會重新載入(devtools內嵌了一個LiveReload Server,當資源發生改變時,瀏覽器重新整理)

5、在application.properties中配置spring.devtools.restart.enabled=false,此時restart類載入器還會初始化,但不會監視檔案更新。在SprintApplication.run之前呼叫System.setProperty(“spring.devtools.restart.enabled”, “false”);可以完全關閉重啟支援。