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”);可以完全關閉重啟支援。