Spring Boot在開發時實現熱部署(開發時修改文件保存後自動重啓應用)(spring-boot-devtools)

熱部署是什麼html

你們都知道在項目開發過程當中,經常會改動頁面數據或者修改數據結構,爲了顯示改動效果,每每須要重啓應用查看改變效果,其實就是從新編譯生成了新的Class文件,這個文件裏記錄着和代碼等對應的各類信息,而後Class文件將被虛擬機的ClassLoader加載。java

而熱部署正是利用了這個特色,它監聽到若是有Class文件改動了,就會建立一個新的ClaassLoader進行加載該文件,通過一系列的過程,最終將結果呈如今咱們眼前。git

類加載機制github

Java中的類通過編譯器能夠把代碼編譯爲存儲字節碼的Class文件,該Class文件存儲了各類信息,最終要加載到虛擬機中運行使用。spring

類加載機制(摘自《深刻理解 Java 虛擬機》)瀏覽器

虛擬機把描述類的數據從Class文件加載到內存中,並對數據進行校驗、轉換解析和初始化,最終造成能夠被虛擬機直接使用的Java類型。緩存

Spring Boot實現熱部署數據結構

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

Spring Loadedmaven

這種方式是以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>

集成注意:

一、若是發現沒有熱部署效果,則須要檢查IDE配置中有沒有打開自動編譯。

二、若是使用Thymeleaf模板引擎,須要把模板默認緩存設置爲false

#禁止thymeleaf緩存(建議:開發環境設置爲false,生成環境設置爲true)
spring.thymeleaf.cache=false

三、針對devtools的能夠指定目錄或者排除目錄來進行熱部署

#添加那個目錄的文件須要restart
spring.devtools.restart.additional-paths=src/main/java
#排除那個目錄的文件不須要restart
spring.devtools.restart.exclude=static/**,public/**

四、默認狀況下,/META-INF/maven,/META-INF/resources,/resources,/static,/templates,/public這些文件夾下的文件修改不會使應用重啓,可是會從新加載(devtools內嵌了一個LiveReload Server,當資源發生改變時,瀏覽器刷新)

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

 

參考:

http://www.cnblogs.com/magicalSam/p/7196355.html

http://blog.csdn.net/je_ge/article/details/53326525

http://www.jb51.net/article/112473.htm

http://www.cnblogs.com/lspz/p/6832358.html

相關文章
相關標籤/搜索