Spring Boot 實現開發時熱部署

熱部署原理:html

它監聽到若是有Class文件改動了,就會建立一個新的ClaassLoader進行加載該文件,通過一系列的過程,最終將結果呈如今咱們眼前。java

類加載機制:spring

Java中的類通過編譯器能夠把代碼編譯爲存儲字節碼的Class文件,該Class文件存儲了各類信息,最終要加載到虛擬機中運行使用。虛擬機把描述類的數據從Class文件加載到內存中,並對數據進行校驗、轉換解析和初始化,最終造成能夠被虛擬機直接使用的Java類型。緩存

Spring Boot 實現開發時熱部署:app

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

使用 Spring Loaded
使用 spring-boot-devtoolside

Spring Loaded
這種方式是以Maven插件的形式去加載,因此啓動時使用經過Maven命令mvn spring-boot:run啓動,而經過Application.run方式啓動的會無效,由於經過應用程序啓動時,已經繞開了Maven插件機制。
pom集成方式:spring-boot

<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>ui

spring-boot-devtools
這種方式不管怎麼啓動應用,均可以達到修改文件後重啓應用。
pom集成:idea

<!-- 熱部署模塊 -->
<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

1.針對devtools的能夠指定目錄或者排除目錄來進行熱部署
#添加那個目錄的文件須要restart
spring.devtools.restart.additional-paths=src/main/java
#排除那個目錄的文件不須要restart
spring.devtools.restart.exclude=static/**,public/**

設置idea讓他實現文件修改自動重啓項目1.找到idea的Preferences -> Build, Execution, Deployment -> Compiler,勾選Build project automatically2.回到idea正常界面,Mac使用快捷鍵shift+option+command+/,window上的快捷鍵是Shift+Ctrl+Alt+/,打開Registry,勾選compiler.automake.allow.when.app.runningcompiler.automake.allow.when.app.running經過以上的設置就能夠在不重啓服務的狀況下加載html,但若是修改java文件,服務在幾秒後會自動重啓,若是不但願服務重啓須要在application.properties或application.yml中添加spring.devtools.reatart.enable=false

相關文章
相關標籤/搜索