熱部署是什麼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