開發與維運

spring-boot-devtools: 免費的熱部署工具

Jrebel很好用,但是要收費.......

熱部署

監聽到如果有Class文件改動了,就會創建一個新的ClaassLoader進行加載該文件,經過一系列的過程,最終將結果呈現在我們眼前

spring-boot-devtools

是一個為開發者服務的一個模塊,其中最重要的功能就是自動將應用代碼更改到最新的App上面去,即在我們改變了一些代碼或者配置文件的時候,應用可以自動重啟,這在我們開發的時候,非常有用。

重新啟動 vs 重新加載

Spring Boot提供的重啟技術通過使用兩個類加載器來工作。

不改變的類(例如來自第三方jar的類)被加載到base classloader中。

我們正在開發的類會加載到restart classloader中。當應用程序重新啟動時,restart classloader將被丟棄並創建一個新類。這種方法意味著應用程序重啟通常比"cold starts"快得多,因為基類加載器已經可用並且已經被填充。

spring-boot-devtools 使用

maven依賴

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
    <optional>true</optional>
</dependency>

image.gif

yml配置

# Spring
spring:
  devtools:
    restart:
      # 默認為true
      enabled: true

image.gif

 Idea配置

代碼自動編譯

File --> Settings --> Compiler --> Build Project automatically

20210409163753521 (1).png

image.gif

運行期間自動編譯

Mac使用快捷鍵shift+option+command+/,window上的快捷鍵是Shift+Ctrl+Alt+/,打開Registry,勾選

compiler.automake.allow.when.app.running

20210409163807834.png

image.gif

通過以上的設置就可以在不重啟服務的情況下加載html,但如果修改java文件,服務在幾秒後會自動重啟,如果不希望服務重啟需要在application.properties或application.yml中添加spring.devtools.reatart.enable=false

Thymeleaf模板引擎

如果使用Thymeleaf模板引擎,需要把模板默認緩存設置為false

#禁止thymeleaf緩存(建議:開發環境設置為false,生成環境設置為true)
# Spring
spring:
  thymeleaf:
    cache: false

image.gif

spring-boot-devtools 高級功能

1. 排除資源

某些資源不一定需要在更改時觸發重新啟動。例如,可以就地編輯Thymeleaf模板。

默認情況下,在改變資源/META-INF/maven,/META-INF/resources,/resources,/static,/public,或 /templates不會觸發重啟但會觸發 重新加載。可以使用spring.devtools.restart.exclude屬性來自定義排除的資源。例如,要僅排除/static,/public可以設置以下屬性:

spring.devtools.restart.exclude=static/**,public/**

image.gif

2. 監控其他路徑

如上所述,DevTools監控類路徑資源的變動,但如果我們想更改不在類路徑中的文件時重新啟動或重新加載應用程序,該怎麼辦呢?這是可以使用spring.devtools.restart.additional-paths屬性來配置其他路徑以監視更改

# Spring
spring:
  devtools:
    restart:
      # 默認為true
      enabled: true
      #排除那個目錄的文件不需要restart
      additional-exclude: static/**,public/**
      #添加那個目錄的文件需要restart
      additional-paths: src/main/java

image.gif

3. LiveReload

LiveReload在做前端開發的時候,經常會用到。

spring-boot-devtools模塊包含嵌入式LiveReload服務器,可以在資源更改時用於觸發瀏覽器刷新。 LiveReload瀏覽器擴展程序支持Chrome,Firefox和Safari,你可以從livereload.com免費下載。

下面是Chrome的Remote Live Reload插件地址。安裝即可擁有這個酷炫的功能。

https://chrome.google.com/webstore/detail/remotelivereload/jlppknnillhjgiengoigajegdpieppei?hl=en-GB

image.gif

devtools也會在後臺開啟一個LiveReload Server,瀏覽器會與這個Server保持著一個長連接,當後端有前端資源變動的時候,將會通知瀏覽器進行刷新,實現熱部署。

4. 遠程調試

暫時沒用到,後期補充

Leave a Reply

Your email address will not be published. Required fields are marked *