在實際的項目開發過中,當我們修改了某個java類檔案時,需要手動重新編譯、然後重新啟動程式的,整個過程比較麻煩,特别是項目啟動慢的時候,更是影響開發效率。其實Spring Boot的項目碰到這種情況,同樣也同樣需要經曆重新編譯、重新啟動程式的過程。 隻不過 Spring Boot 提供了一個spring-boot-devtools的子產品,使得 Spring Boot應用支援熱部署,無需手動重新開機Spring Boot應用,,提高開發者的開發效率。接下來,聊一聊Spring Boot 開發環境熱部署。
一、原理
devtools 使用了兩個類加載器(ClassLoader),一個是 Base類加載器(base classloader ):加載那些不會改變的類,如:第三方Jar包等,而另一個是 Restart類加載器(restart classloader):負責加載那些正在開發的會改變的類。這樣在有代碼更改的時候,因為重新開機的時候隻是加載了在開發的Class類,沒有重新加載第三方的jar包,是以實作了較快的重新開機時間。
devtools 監聽classpath下的檔案變動(發生在儲存時機),并且會立即重新開機應用。進而實作類檔案和屬性檔案的熱部署。
二、快速配置
1、pom配置
引入devtools的依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<!-- optional=true, 依賴不會傳遞, 該項目依賴devtools;之後依賴boot項目的項目如果想要使用devtools, 需要重新引入 -->
<optional>true</optional>
</dependency>
注意:optional=true, 依賴不會傳遞, 該項目依賴devtools;之後依賴boot項目的項目如果想要使用devtools, 需要重新引入。
2、application.properties配置
在application.properties中配置devtools。
# 關閉緩存即時重新整理
#spring.thymeleaf.cache=false
#熱部署生效
spring.devtools.restart.enabled=true
#設定重新開機的目錄
spring.devtools.restart.additional-paths=src/main/java
#classpath目錄下的WEB-INF檔案夾内容修改不重新開機
spring.devtools.restart.exclude=WEB-INF/**
說明:
- devtools可以實作頁面熱部署,即頁面修改後會立即生效,需要将application.properties檔案中配置spring.thymeleaf.cache=false。
- devtools會監聽classpath下的檔案變動,并且會立即重新開機應用。
3、IDEA配置
如果idea是新安裝的或者之前就沒有配置過,發現改變代碼項目熱部署不成功。當我們修改了Java類後,IDEA預設是不自動編譯的,而spring-boot-devtools又是監測classpath下的檔案發生變化才會重新開機應用。
是以需要設定IDEA的自動編譯:
(1)File-Settings-Compiler-Build Project automatically
(2)ctrl + shift + alt + /,選擇Registry,勾上 Compiler autoMake allow when app running
這樣,就可以使用devtools實作熱部署了。
三、驗證測試
啟動項目,然後修改項目中的某個java檔案,此時idea會自動編譯該java檔案。最後Spring Boot 背景自動重新開機。加載該配置檔案。
最後
以上,就把如何配置Spring Boot 開發環境熱部署介紹完了。還是比較簡單的,大家自己去研究吧。
推薦閱讀:
SpringBoot從小白到精通(十四)使用JdbcTemplate操作資料庫,配置多資料源! SpringBoot從小白到精通(十三)如何實作事務儲存 SpringBoot從小白到精通(十二)logback日志配置 SpringBoot從小白到精通(十一)統一異常處理 SpringBoot從小白到精通(十)使用Interceptor攔截器,一學就會! SpringBoot從小白到精通(九)使用@Async實作異步執行任務 SpringBoot從小白到精通(八)熟悉@EnableScheduling,一秒搞定定時任務 SpringBoot從小白到精通(七)使用Redis實作高速緩存架構 SpringBoot從小白到精通(六)使用Mybatis實作增删改查【附詳細步驟】 SpringBoot從小白到精通(五)Thymeleaf的文法及常用标簽 SpringBoot從小白到精通(四)Thymeleaf頁面模闆引擎 SpringBoot從小白到精通(三)系統配置及自定義配置 SpringBoot從小白到精通(二)如何傳回統一的資料格式 SpringBoot從小白到精通(一)如何快速建立SpringBoot項目