1. 程式人生 > >Spring Boot 熱部署(3)

Spring Boot 熱部署(3)

star 內嵌 創建 三方 framework plugins mman 類文件 img

熱部署:當發現程序修改時自動啟動應用程序。

spring boot為開發者提供了一個名為spring-boot-devtools的模塊來使sring boot應用支持熱部署,提高開發者的開發效率,無需手動重啟spring boot應用程序。

devtools的原理

  深層原理是使用了兩個ClassLoader,一個ClassLoader加載那些不會改變的類(第三方jar包),另一個ClassLoader加載會更改的類,稱為restart ClassLoader,這樣在有代碼更改的時候,原來的restart ClassLoader會被丟棄,重新創建一個restart ClassLoader,由於需要加載的類比較少,所以實現了較快的重啟時間。

在pom.xml中添加依賴:

        <!--熱部署 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>

編譯節點添加:

    <
build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <fork>true</fork> </
configuration> </plugin> </plugins> </build>

說明:

  devtools可以實現頁面熱部署,實現類文件熱部署,實現對屬性文件的熱部署。即devtools會監聽classpath下文件的變動,不過這種方式是屬於項目重啟,會清空session中的值,也就是如果有用戶登陸的話,項目重啟要重新登陸。

  默認情況下,/META-INF/maven,/META-INF/resources,/resources,/static,/templates,/public這些文件夾下的文件修改不會使應用重啟,但是會重新加載(devtools內嵌了一個LiveReload server,當資源發生改變時,瀏覽器刷新)。

Idea設置

  當我們修改了Java類後,IDEA默認是不自動編譯的,而spring-boot-devtools又是監測classpath下的文件發生變化才會重啟應用,所以需要設置IDEA的自動編譯.

other settings -> default settings.

技術分享圖片

command+shift+a 全局搜索

技術分享圖片

找到compiler.automake.allow.when.app.running,勾上開啟此功能即可

技術分享圖片

此時重啟項目即可生效,改動代碼不用重啟項目了

Spring Boot 熱部署(3)