spring boot 熱部署 spring boot devtools devtools JRebel

Spring boot Devtools 實測

李佳樺 2020/05/04 10:00:00
145

前言

    以往開發時修改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

 

李佳樺