文章目錄
- 使用的軟體
- 配置開發者工具
- 在瀏覽器中安裝`LiveReload`
- 自動重啟
- 自定義監聽路徑
- 使用觸發器檔案
- 剔除資源
- 禁用重新啟動
- 1. 使用應用程式屬性檔案
- 2. 在呼叫 SpringApplication.run() 之前使用系統屬性,如下所示,
- 自動重新啟動中常用的屬性
- 參考文獻
- 下載原始碼
本頁將介紹Spring Boot使用maven的開發工具自動重啟的情況,
當我們的應用程式使用spring boot開發者工具時,只要在開發模式下修改類路徑中的檔案,它就會自動重啟服務器并重繪瀏覽器頁面,
我們使用spring boot maven命令mvn spring-boot:run運行我們的分解形式的專案,
Spring boot開發工具是spring-boot-devtools,需要在maven或gradle中配置,
開發者工具用于快速開發,
當我們在IDE中使用分解形式的專案時,在修改了任何檔案后,我們需要測驗我們的應用程式,
為了節省開發時間,有許多插件,如JRebel,可以使用類加載器重新加載檔案的變化,
Spring boot也提供了一個工具來幫助開發者快速開發,這就是spring-boot-devtools,
在這里,我們將了解開發者工具的一個功能,即在類路徑中的任何檔案發生變化時,自動重啟服務器以及在瀏覽器上重繪頁面,
為了獲得頁面重繪,我們需要在瀏覽器中安裝LiveReload,
開發者工具提供了許多屬性,這些屬性將被配置在應用程式的屬性檔案中以控制自動重啟,
現在我們將提供一個例子,一步一步地使用開發者工具進行自動重啟,
使用的軟體
- Java 8
- Maven 3.3.9
- Spring Boot 1.4.3.RELEASE
- Eclipse Mars
配置開發者工具
Spring提供了spring-boot-devtools的開發者工具,
這些工具在應用開發模式中很有幫助,
開發者工具的一個特點是自動重啟服務器,要使用maven配置開發者工具,我們需要添加spring-boot-devtools的依賴關系,如下所示,
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
如果我們使用Gradle,我們將添加spring-boot-devtools的依賴項,如下所示,
compile("org.springframework.boot:spring-boot-devtools")
在使用開發者工具時,我們應該知道以下幾點,
1. 當我們創建一個JAR或WAR作為完全打包的應用程式并運行它時,開發人員工具就會自動被禁用,
2. 當我們使用java -jar或特殊類加載器運行應用程式時,它被認為是一個“生產專案(production application)”,開發工具將被自動禁用,
3. 最佳做法是設定為<optional>true</optional>,這樣可以避免開發人員工具在其他模塊上傳遞應用,Gradle目前不支持此功能,
4. 我們還可以在maven和gradle中使用excludeDevtools,以確保開發人員工具JAR永遠不會包含在生產構建中,
5. 配置開發人員工具后,使用restartclassloader啟動分解形式的專案,并通過springboot使用base類加載器啟動完全打包的應用程式,
在瀏覽器中安裝LiveReload
在spring MVC專案中,有一個網路服務器和瀏覽器的參與,
在開發模式下,每當我們改變任何檔案時,通常需要重新啟動服務器并重繪瀏覽器以獲得更新的資料,
Spring boot開發工具已經將這兩項任務自動化,
為了自動重繪瀏覽器,我們需要安裝LiveReload,
在我們的例子中,我使用的是Firefox,
我需要在我的Firefox中安裝LiveReload,
按照下面的步驟,準備好LiveReload,
1. 進入LiveReload擴展鏈接并安裝它,
2. 要使用LiveReload,我們需要運行LiveReload服務器,對于我們來說,spring boot開發工具將啟動一個LiveReload服務器,
3. LiveReload可以被啟用和禁用,要使用LiveReload重繪頁面,必須啟用它,
4. 在我的例子中,我在Firefox中使用LiveReload,要啟用它,首先進入Firefox的自定義視圖,從那里將LiveReload添加到工具列,現在,右擊LiveReload圖示并啟用它,在啟用它之前,確保maven 的 mvn spring-boot:run命令正在運行,這將啟動tomcat和LiveReload服務器,
自動重啟
Spring boot的開發者工具有一個功能,每當類路徑上的檔案被修改,就會自動重啟服務器并重繪瀏覽器頁面,
一旦我們在maven或gradle中配置了開發者工具,那么在eclipse中修改檔案后,當我們保存時,自動重啟功能就會啟動,
所有在類路徑中的檔案都不需要服務器重啟,
很多檔案只需要在瀏覽器上重繪頁面就可以完成任何修改,
當我們對java檔案進行任何修改并保存時,服務器重啟和瀏覽器重繪都需要,
有些檔案不需要服務器重啟,只需要在瀏覽器上重繪頁面,例如靜態頁面、Thymeleaf模板、HTML頁面等,
對于類路徑上同樣需要在瀏覽器上安裝LiveReload的以下路徑,Spring boot開發工具默認只在瀏覽器上執行頁面重繪,
這些目錄模式如下,
/META-INF/maven
/META-INF/resources
/resources
/static
/public
/templates
現在我們將用Spring MVC和Thymeleaf創建一個示例應用程式,這里我們還將創建一些不在類路徑中的檔案,找到專案結構,

位于類路徑中的檔案如下所示,
1. Java檔案:在瀏覽器上自動重啟服務器和重繪頁面
src\main\java\com\concretepage\Application.java
src\main\java\com\concretepage\controller\HelloController.java
2. 資源檔案:默認情況下,僅在瀏覽器上自動重繪頁面
src\main\resources\static\index.html
src\main\resources\templates\hello.html
src\main\resources\application.properties
我們還創建了一些不在類路徑中的檔案,
files\apptrigger.txt
files\txt\txtfile.txt
現在找到我們的maven組態檔,
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.concretepage</groupId>
<artifactId>spring-demo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<description>Spring Boot Automatic Restart</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.3.RELEASE</version>
<relativePath/>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
測驗自動重啟的步驟,
1. 使用鏈接下載我的演示專案源代碼并將其匯入eclipse,
2. 使用命令提示符進入專案的根目錄,運行命令mvn clean eclipse:eclipse并重繪eclipse中的專案檔案夾,這將創建一個類路徑檔案,
3. 現在運行命令mvn spring-boot:run,這將啟動一個Tomcat服務器,或者在IDE中進入主類,右鍵單擊并Run As -> Java Application
4. 現在進入瀏覽器,訪問 http://localhost:8080/或http://localhost:8080/hello,
5. 點擊瀏覽器工具列選單上的LiveReload圖示,啟用自動重繪頁面,
6. 現在改變java檔案中的一些內容并保存,我們將觀察到,服務器將重新啟動,瀏覽器上的頁面將重繪,
7. 現在改變HTML檔案中的內容,我們將觀察到,只有瀏覽器上的頁面會重繪,而服務器不會重新啟動,
自定義監聽路徑
到目前為止,我們已經了解到SpringBoot開發者工具只監聽位于類路徑下的檔案,以便自動重新啟動,
現在我們將包括那些不在類路徑中的檔案,
在我們的專案中,我們在包含以下檔案的類路徑之外創建了一個名為files的目錄,
files\apptrigger.txt
files\txt\txtfile.txt
盡管檔案目錄不在類路徑中,但它仍然可以利用自動重啟的優勢,
為了實作它,SpringBoot提供了需要在應用程式屬性檔案中配置的屬性,如下所示,
application.properties
spring.devtools.restart.additional-paths = files
這里的檔案是我在專案的根目錄下創建的目錄,
配置完屬性后,我們需要重新運行命令mvn spring-boot:run,現在通過改變檔案apptrigger.txt或txtfile.txt中的內容來測驗自動重啟,并保存它,我們將觀察到服務器將重啟,頁面將在瀏覽器上重繪,
使用觸發器檔案
Spring boot提供了一個配置觸發器檔案的屬性,以實作如果觸發器檔案被修改時,開發工具才會開始監聽檔案變化,
在使用IDE的開發模式中,我們經常改變檔案并保存它,
為了避免不必要的自動重啟,我們可以使用一個觸發器檔案,
每當我們修改觸發器檔案時,只有當開發工具監聽到檔案的任何變化,如果檔案有任何變化,自動重啟就會啟動,
觸發器檔案可以手動修改,也可以使用IDE插件,為了配置觸發檔案,spring boot提供了spring.devtools.restart.trigger-file屬性,可以按以下方式配置,
application.properties
spring.devtools.restart.additional-paths = files
spring.devtools.restart.trigger-file = apptrigger.txt
在上述配置中,apptrigger.txt是我們的觸發器檔案,它位于files/apptrigger.txt路徑上,找到下面的步驟來測驗觸發器檔案,
1. 首先重新運行命令mvn spring-boot:run
2. 現在修改任何檔案,假設我正在修改任何java檔案,例如HelloController.java,然后修改觸發器檔案,即apptrigger.txt,我們將觀察到,自動重啟將被啟動,
3. 我們需要明白,如果我們只修改apptrigger.txt,那么就不會有自動重啟,這是因為當我們修改觸發器檔案apptrigger.txt時,開發工具會開始觀察檔案的任何變化,由于我們沒有修改其他檔案,所以自動重啟不會發生,
剔除資源
對于位于類路徑下的檔案,spring boot開發工具會關注完全自動重啟,但檔案夾結構為/META-INF/maven、/META-INF/resources、/resources、/static、/public或/templates的模板和靜態檔案,默認只獲得頁面重繪,
我們可以打破模板和靜態檔案的默認設定,實作完全自動重啟,為了實作這一點,我們需要配置spring.devtools.restart.exclude屬性,如下所示,
application.properties
spring.devtools.restart.exclude = static/**
讓我們了解現在將發生什么,
1. 首先重新運行命令mvn spring-boot:run
2. 現在,如果我們修改檔案templates\hello.html,開發工具將自動重新啟動服務器,并重繪頁面,
3. 如果我們修改檔案static\index.html,開發工具將只重繪頁面,
4. 如果我們想把更多的檔案夾排除在完全自動重啟之外,我們可以配置逗號分隔,如下所示,
spring.devtools.restart.exclude=static/**,templates/**
禁用重新啟動
如果我們想從開發工具中禁用自動重啟功能,我們可以通過兩種方式配置spring.devtools.restart.enabled屬性來實作,
1. 使用應用程式屬性檔案
application.properties
spring.devtools.restart.enabled = false
在這種情況下,開發人員工具將初始化重啟類加載器,但不會監視檔案更改,
2. 在呼叫 SpringApplication.run() 之前使用系統屬性,如下所示,
@SpringBootApplication
public class Application {
public static void main(String[] args) {
System.setProperty("spring.devtools.restart.enabled", "false");
SpringApplication.run(Application.class, args);
}
}
在這種情況下,開發工具不會初始化重啟類加載器,也不會監聽檔案變化,因此,自動重啟被完全禁用,
自動重新啟動中常用的屬性
這里我們列出了用于自動重啟的有用的開發工具屬性,這些屬性是在application.properties檔案中配置的,
spring.devtools.restart.additional-paths: 添加不在類路徑中的自動重啟路徑,
spring.devtools.restart.trigger-file: 指定一個觸發器檔案名,現在開發人員工具僅在修改觸發器檔案時才監聽重新啟動檢查,
spring.devtools.restart.exclude: 指定路徑,將檔案排除在完全自動重啟之外,
spring.devtools.restart.additional-exclude: 指定將被排除在完全自動重啟之外的其他路徑,保持默認設定,
spring.devtools.restart.enabled: 如果值為false,那么開發者工具將停止監聽自動重啟的檔案,
現在我們將提供用于定制重啟加載器的屬性,這些屬性將被配置在META-INF/spring-devtools.properties檔案中,
restart.include. : 它是一個前綴,我們使用它來宣告一個屬性,并通過正則運算式模式來指定JAR的名稱,以便將一個JAR從基礎類加載器包含到重啟類加載器,
restart.exclude. : 它是一個前綴,我們使用它宣告一個屬性,并使用正則運算式模式分配JAR名稱,以將JAR從重新啟動類加載器排除到基本類加載器,
參考文獻
【1】Using Spring Boot: Developer tools
【2】Spring Boot Automatic Restart using Developer Tools with Maven
下載原始碼
spring-boot-automatic-restart-using-developer-tools-with-maven.zip
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/301261.html
標籤:其他
上一篇:性能分析之子鎖存器(latch)到 SQL(Oracle)
下一篇:卡牌對決(2版)
