Spring Boot開發者工具:自動重啟、LiveReload、遠端開發、預設的開發時屬性值
Spring Boot 1.3引入了一組新的開發者工具,可以讓你在開發時更方便地使用Spring Boot,包括如下功能。
-
自動重啟:當
Classpath
裡的檔案發生變化時,自動重啟執行中的應用程式。 - LiveReload支援:對資源的修改自動觸發瀏覽器重新整理。
-
遠端開發:遠端部署時支援自動重啟和
LiveReload
。 - 預設的開發時屬性值:為一些屬性提供有意義的預設開發時屬性值。
Spring Boot的開發者工具採取了庫的形式,可以作為依賴加入專案。如果你使用Gradle來構建專案,可以像下面這樣在
build.gradle
檔案裡新增開發工具:
compile "org.springframework.boot:spring-boot-devtools"
在Maven POM裡新增
<dependency>
是這樣的:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId> </dependency>
當應用程式以完整打包好的JAR或WAR檔案形式執行時,開發者工具會被禁用,所以沒有必要在構建生產部署包前移除這個依賴。
一、自動重啟
在啟用了開發者工具後,
Classpath
裡對檔案做任何修改都會觸發應用程式重啟。為了讓重啟速度夠快,不會修改的類(比如第三方JAR檔案裡的類)都載入到了基礎類載入器裡,而應用程式的程式碼則會載入到一個單獨的重啟類載入器裡。檢測到變更時,只有重啟類載入器重啟。
有些Classpath裡的資源變更後不需要重啟應用程式。像Thymeleaf這樣的檢視模板可以直接編輯,不用重啟應用程式。在/static或/public裡的靜態資源也不用重啟應用程式,所以Spring Boot 開發者工具會在重啟時排除掉如下目錄:
/META-INF/resources
、
/resources
、
/static
、
/public
和
/templates
。
可以設定
spring.devtools.restart.exclude
屬性來覆蓋預設的重啟排除目錄。例如,你只排除
/static
和
/templates
目錄,可以像這樣設定
spring.devtools.restart. exclude
:
spring:
devtools:
restart:
exclude: /static/**,/templates/**
另一方面,如果想徹底關閉自動重啟,可以將
spring.devtools.restart.enabled
設定為false:
spring:
devtools:
restart:
enabled: false
另外,還可以設定一個觸發檔案,必須修改這個檔案才能觸發重啟。例如,在修改為.trigger 的檔案前你都不希望執行重啟,那麼你只需像這樣設定
spring.devtools.restart.trigger-file
屬性:
spring:
devtools:
restart:
trigger-file: .trigger
如果你的IDE會連續編譯修改的檔案,那觸發檔案還是很有用的。沒有觸發檔案的話,每次變更都會觸發重啟。有觸發檔案,就能保證只有你想重啟時才會發生重啟(修改觸發檔案即可)。
二、LiveReload
在Web應用程式開發過程中,最常見的步驟大致如下:
- 修改要呈現的內容(比如圖片、樣式表、模板)。
- 點選瀏覽器裡的重新整理按鈕,檢視修改的結果。
- 回到第1步。
雖然這並不難,但如果能不點重新整理就直接看到修改結果,那豈不是更好?
Spring Boot的開發者工具整合了
LiveReload()
,可以消除重新整理的步驟。啟用開發者工具後,Spring Boot會啟動一個內嵌的
LiveReload
伺服器,在資原始檔變化時會觸發瀏覽器重新整理。你要做的就是在瀏覽器裡安裝
LiveReload
外掛。
如果想要禁用內嵌的
LiveReload
伺服器,可以將
spring.devtools.livereload. enabled
設定為false:
spring:
devtools:
livereload:
enabled: false
三、遠端開發
在遠端執行應用程式時(比如部署到伺服器上或雲上),開發者工具的自動重啟和
LiveReload
特性都是可選的。此外,Spring Boot開發者工具還能遠端除錯Spring Boot應用程式。
在傳統的開發過程中,你不會開啟遠端開發功能,因為這會影響效能。但在一些特殊的場景中,此類工具就很有用。比如,出於開發目的,所開發的應用程式部署在非生產環境裡。如果應用程式不是在本地開發環境裡,而是在雲端部署,則尤其如此。
你必須設定一個遠端安全碼來開啟遠端開發功能:
spring:
devtools:
remote:
secret: myappsecret
有了這個屬性後,執行中的應用程式就會啟動一個伺服器元件以支援遠端開發。它會監聽接受變更的請求,可以重啟應用程式或者觸發瀏覽器重新整理。
為了使用這個遠端伺服器,你需要在本地執行遠端開發工具的客戶端。這個遠端客戶端是一個類,全限定類名是
org.springframework.boot.devtools.RemoteSpringApplication
。它會執行在IDE裡,要求提供一個引數,告知遠端應用程式部署在哪裡。
例如,假設你正遠端執行閱讀列表應用程式,部署在
Cloud Foundry
上,地址是
https://
readinglist.cfapps.io
。如果你正在使用Eclipse或Spring ToolSuite,可以透過如下步驟開啟遠端客戶端。
- 選擇Run > Run Configurations選單項。
- 建立一個新的Java Application執行配置。
- 在Project裡選中Reading List專案(可以鍵入專案名或者點選Browse按鈕找到這個專案,見圖A-1)。
- 在Main Class裡鍵入
org.springframework.boot.devtools.RemoteSpringAppli-cation
(見圖A-1)。 - 切換到Arguments標籤頁,在
Program Arguments
裡鍵入 https:// readinglist.cfapps . io(見圖A-2)。
客戶端啟動後,就可以在IDE裡修改應用程式了。在檢測到變動後,這些修改點會被推送到遠端並加以應用。如果修改的內容涉及呈現的Web資源(比如樣式表或JavaScript),
LiveReload
還會觸發瀏覽器重新整理。
遠端客戶端還會開啟基於HTTP的遠端除錯通道,這樣就能在IDE裡除錯部署在遠端的應用程式了。你要做的就是確保遠端應用程式開啟了遠端除錯功能。這通常可以透過配置JAVA_OPTS來實現。
比方說,你的應用程式部署在Cloud Foundry上,可以像下面這樣在應用程式的
manifest.yml
裡設定JAVA_OPTS。
---
env:
JAVA_OPTS: "-Xdebug -Xrunjdwp:server=y,transport=dt_socket,suspend=n"
遠端應用程式啟動後,會和本地除錯伺服器建立一個連線。你可以設定斷點,一步步執行遠端應用程式裡的程式碼,就好像它們執行在本地一樣(出於網路原因,速度會有點慢)。
四、預設的開發時屬性
有些配置屬性通常在開發時設定,從來不用在生產環境裡。比如檢視模板快取,在開發時最好關掉,這樣你可以立刻看到修改的結果。但在生產環境裡,為了追求更好的效能,應該開啟檢視模版快取。
預設情況下,Spring Boot會為其支援的各種檢視模板(
Thymeleaf
、
Freemarker
、
Velocity
、
Mustache
和
Groovy
模板)開啟快取選項。但如果存在Spring Boot的開發者工具,這些快取就會禁用。
實際上,這就是說在開發者工具啟用後,如下屬性會設定為false:
-
spring.thymeleaf.cache
-
spring.freemarker.cache
-
spring.velocity.cache
-
spring.mustache.cache
-
spring.groovy.template.cache
這樣一來,就不用在開發時(在一個開發時使用的Profile配置裡)禁用它們了。
五、全域性配置開發者工具
你應該已經注意到了,在使用開發者工具時,你通常會在多個專案裡使用相同的設定。舉個例子,如果你使用了重啟觸發檔案,那麼你很可能在多個專案裡都使用相同的觸發檔名。相比在每個專案裡重複開發者工具配置,對開發者工具做全域性配置顯得更方便一些。
要實現這個目的,可以在你的主目錄(
home directory
)裡建立一個名為
.spring-boot-devtools. properties
的檔案。(請注意,檔名用“.”開頭。)在那個檔案裡,你可以設定希望在多個專案裡共享的各種開發者工具屬性。
例如,假設你想把觸發檔案的名稱設定為.trigger,在所有Spring Boot專案裡禁用
LiveReload
。你可以建立一個
.spring-boot-devtools.properties
檔案,包含如下內容:
spring.devtools.restart.trigger-file=.trigger spring.devtools.livereload.enabled=false
要是你想覆蓋這些配置,可以在每個專案的
application.properties
或
application.yml
檔案裡設定特定於每個專案的屬性。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69964492/viewspace-2765272/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C#給自動屬性設定預設值C#
- swoole 下開發,修改程式碼後,自動重啟工具
- 淺嘗Spring註解開發_自定義註冊元件、屬性賦值、自動裝配Spring元件賦值
- 驚呆了!Spring Boot 還能開啟遠端除錯?Spring Boot除錯
- spring boot + vue + element-ui全棧開發入門——spring boot後端開發Spring BootVueUI全棧後端
- Kotlin + Spring Boot服務端開發KotlinSpring Boot服務端
- Spring Boot 的 Web 開發Spring BootWeb
- LINUX開發使用的3個遠端工具Linux
- css的border屬性預設值CSS
- CSS border屬性預設值CSS
- VS Code Remote 釋出!開啟遠端開發新時代REM
- 使用 Kotlin + Spring Boot 進行後端開發KotlinSpring Boot後端
- Laravel vs. Spring Boot:後端開發選擇LaravelSpring Boot後端
- Spring Cloud 覆寫遠端的配置屬性SpringCloud
- Win10預設開啟“遊戲模式” 無懼遊戲中自動更新重啟Win10遊戲模式
- Linux遠端開發Linux
- spring boot開發熱載入問題 自動編譯不生效Spring Boot編譯
- win10怎麼自動開啟自動設定時間_win10開啟自動設定時間的步驟Win10
- 軟體開發的自然屬性
- spring boot + vue + element-ui全棧開發入門——前後端整合開發Spring BootVueUI全棧後端
- Web APIs-07:本地儲存 + 移動端開發框架 + classList屬性WebAPI框架
- 革命性移動端開發框架-Flutter時間簡史框架Flutter
- 遠哥談 使用WebSocket開發線上實時看遠端伺服器log日誌的工具Web伺服器
- 建立屬於自己的 Spring Boot 自動配置Spring Boot
- Android開發EditText屬性Android
- iOS開發之遠端推送iOS
- 開發一個Spring Boot Starter!Spring Boot
- Spring Boot(二):Web 綜合開發Spring BootWeb
- Spring Boot (二):Web 綜合開發Spring BootWeb
- 【雜談】Spring Boot 預設支援的併發量Spring Boot
- 開啟Spring Boot 之旅Spring Boot
- 為 protocol 中屬性新增預設值Protocol
- 【移動端開發】移動端開發基礎問題
- 用於Spring Boot開發的VSCode設定 - StefanSpring BootVSCode
- Bootstrap的datetimepicker預設自動開啟彈框(js中開啟彈窗)bootJS
- 開發者最愛的三款開發工具
- 最香遠端開發解決方案!手把手教你配置VS Code遠端開發工具,工作效率提升N倍
- Android開發之屬性動畫Android動畫