Spring boot Devtools 實測
前言
以往開發時修改Java檔程式和設定檔,都需手動重啟Server,修改才會生效,本文使用免費Spring boot DevTools套件,
作到自動重啟熱部署,藉此加快開發效率。
本文針對一些開發實作上會遇到的狀況作驗證,該套件還另外提供遠端應用,於文後附上官網參考連結,有興趣的人可以實測看看。
實測看看
Local環境介紹
作業系統:Mac OS
使用工具:intelliJ IDEA
專案:Spring boot 2.2.6.RELEASE + Maven+Thymeleaf
Project加入以下依賴
Maven (用此作測試)
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional>
<scope>provided</scope><!--部署時將不會打包到jar/war裡面;因此工具建議用於Local開發使用。--> </dependency> </dependencies>
Gradle
dependencies {
compileOnly("org.springframework.boot:spring-boot-devtools")
}
設定檔加入以下設定值
application.properties
#快取false:避免改了模版還需重啟Server spring.thymeleaf.cache=false #熱部署生效 spring.devtools.restart.enabled=true #設置不需要重啟的目錄 spring.devtools.restart.exclude=static/**,templates/**
修改Java程式
Server啟動後,連結測試頁面得到訊息「今天天氣毛毛~」
修改Controller showMsg的訊息加上日期時間,執行build project,重load頁面即可看到已加上日期的結果。
從console log可以看出來有作重啟,但速度上比原始重啟快多了。從官網得知因為重新啟動功能是通過使用兩個
base和restart classloader實現的,base classloader載入不更改的class例如一些第三方jar檔,而正在使用的class
由restart classloader載入。每當觸發重啟時,都會重新啟動並重新建立restart classloader,藉此機制加快重啟速度。
spring-boot-devtools模組包含嵌入式LiveReload伺服器,可以在資源更改時用於觸發瀏覽器重新整理。
application.properties 加上以下設定,即可開關是否使用LiveReload。
#是否支持livereload spring.devtools.livereload.enabled=true
LiveReload瀏覽器擴充套件程式支援Chrome、Firefox和Safari,你可以從livereload.com免費下載。
以最常用的Chrome作實測,點選Chrome載點連到Chrome線上APP商店即可到看LiveReload,點選「加到Chrome」。
開啟測試頁面並啟動LiveReload
修改頁面html檔,不需手動重載網頁,即可看到更新畫面。
左圖為更新前頁面,右圖為更改頁面程式後,從console log看出監控到異動時觸發瀏覽器重新整理。
也可以用於用於監視和重新載入REST API的輸出。
左圖為更新前api輸出結果,右圖為更改Controller程式後,從console log看出重啟後,觸發瀏覽器重新整理,得到修改後結果。
結論
如專案沒有在Server啟動時需要預先載入的資訊(例如一些cache資訊),利用spring boot devtools 自動重啟機制即可免費提升開發時的方便性;
但是反之如啟動時有需要載入的資訊,那之前已有人介紹過的付費JRebel它是自動觸發class的動態加載,還是更為有效率更無感的更新,但是就
需要花點小朋友才能合法使用。
參考資料
https://docs.spring.io/spring-boot/docs/1.5.16.RELEASE/reference/html/using-boot-devtools.html
https://www.itread01.com/yfpphk.html
https://www.itread01.com/content/1546007356.html