1. 程式人生 > >springboot--- devtools(熱部署)

springboot--- devtools(熱部署)

技術介紹

  • devtools:是boot的一個熱部署工具,當我們修改了classpath下的檔案(包括類檔案、屬性檔案、頁面等)時,會重新啟動應用(由於其採用的雙類載入器機制,這個啟動會非常快,如果發現這個啟動比較慢,可以選擇使用jrebel)
    • 雙類載入器機制:boot使用了兩個類載入器來實現重啟(restart)機制:base類載入器(簡稱bc)+restart類載入器(簡稱rc)
      • bc:用於載入不會改變的jar(eg.第三方依賴的jar)
      • rc:用於載入我們正在開發的jar(eg.整個專案裡我們自己編寫的類)。當應用重啟後,原先的rc被丟掉、重新new一個rc來載入這些修改過的東西,而bc卻不需要動一下。這就是devtools重啟速度快的原因。

在使用IDEA做SpringBoot的web專案的時候,在每一次修改了java檔案或者是resource的時候,都必須去重啟一下專案,這樣的話浪費了很多的時間(主要是心理感覺非常煩),那麼,這個時候,就需要去實現程式的熱部署,能夠在修改了頁面的時候能夠立馬重新整理顯現出新的效果。

Eclispe

<!--spring-boot-devtools 熱啟動依賴包-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
    <scope>true</scope>
</dependency>
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
    <!--fork : 如果沒有該項配置,肯定devtools不會起作用,即應用不會restart -->
        <fork>true</fork>
    </configuration>
</plugin>

  修改程式碼後,儲存Ctrl+S即可 

IDEA

第一步:新增熱部署的maven依賴

<!--spring-boot-devtools 熱啟動依賴包-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
    <scope>true</scope>
</dependency>

第二步:新增maven外掛(一般情況下假如用maven管理建立springboot程式的時候,就會自帶這個外掛的,所以你可以對比一下是否有或者一樣,不一樣進行修改)。

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
    <!--fork : 如果沒有該項配置,肯定devtools不會起作用,即應用不會restart -->
        <fork>true</fork>
    </configuration>
    <executions>
        <execution>
            <goals>
                <goal>repackage</goal>
            </goals>
        </execution>
    </executions>
</plugin>

第三步:修改IDEA的設定File--->Other Settings--->Default Settings----->Compiler--->Bulid project automatically打上勾,就按照下圖的勾去選擇就行了(勾選完畢之後,一定記得點選Apply和Ok按鈕使你的選擇生效)。

第四步:開啟IDEA,組合鍵Ctrl+Shift+Alt+/,彈出下面介面,選擇Registry

或者是按住組合鍵Ctrl+Shift+A,彈出下面介面,輸入Registry,選擇第一個Registry

第五步:選擇Registry,勾選complier.automake.allow.when.app.running

第六步:由於在開發過程當中經常會修改html、js和css,但是瀏覽器是有快取的,我們在開發過程當中可以關閉瀏覽器的快取功能,一般是F12喚出開發者工具,然後勾選Disable cache

第七步:在springboot的application.properties檔案當中新增下面語句

spring.thymeleaf.cache=false

第八步,修改完程式碼後需要編譯,而不是儲存 

補充:

  • 預設情況下,/META-INF/maven,/META-INF/resources,/resources,/static/templates,/public這些資料夾下的檔案修改不會使應用重啟,但是會重新載入(devtools內嵌了一個LiveReload server,當資源發生改變時,瀏覽器重新整理)。
    • 如果想改變預設的設定,可以自己設定不重啟的目錄:spring.devtools.restart.exclude=static/**,public/**,這樣的話,就只有這兩個目錄下的檔案修改不會導致restart操作了。
    • 如果要在保留預設設定的基礎上還要新增其他的排除目錄:spring.devtools.restart.additional-exclude
  • 如果想要使得當非classpath下的檔案發生變化時應用得以重啟,使用:spring.devtools.restart.additional-paths,這樣devtools就會將該目錄列入了監聽範圍。