1. 程式人生 > >SrpingBoot 熱啟動與熱部署

SrpingBoot 熱啟動與熱部署

前言:最近面試幾家公司,面試一般都會問到Spring Boot 熱啟動及熱部署相關的問題。做一個總結

程式碼熱部署

當我們已經啟動了一個服務,然後修改程式碼之後,會自動重新部署。Spring專案通常有新內容修改後需要重新編譯然後執行。通過配置Spring boot的熱啟動配置,可以實現自動編譯重啟專案,通常要比手動停止,啟動專案快。

1、引入spring-boot-devtools
pom中新增響應的jar包及外掛

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

2、引入對應的外掛

<!-- 熱啟動,熱部署依賴外掛 -->
            <plugin>
                <groupId>
org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <fork>true</fork> </configuration> </plugin>

通過上面的2步,就可以實現程式碼的熱部署了。
IDEA中 修改程式碼後需要通過 Ctrl+F9 重新編譯

原理介紹

    spring-boot-devtools 是一個為開發者服務的一個模組,其中最重要的功能就是自動應用程式碼更改到最新的App上面去。
    原理是在發現程式碼有更改之後,重新啟動應用,但是速度比手動停止後再啟動還要更快,
    更快指的不是節省出來的手工操作的時間。

其深層原理是:

    使用了兩個ClassLoader,一個Classloader載入那些不會改變的類(第三方Jar包),
    另一個ClassLoader載入會更改的類,稱為 restart ClassLoader,
    這樣在有程式碼更改的時候,原來的restart ClassLoader 被丟棄,
    重新建立一個restart ClassLoader,由於需要載入的類相比較少,
    所以實現了較快的重啟時間(5秒以內)。

部署方式:
熱部署 :在伺服器執行時重新部署專案,直接重新載入整個應用,更多是在生產環境使用
熱載入:在執行時重新載入class,更多是在開發環境使用

熱部署
這裡寫圖片描述

                <dependencies>
                    <dependency>
                        <groupId>org.springframework</groupId>
                        <artifactId>springloaded</artifactId>
                        <version>1.2.8.RELEASE</version>
                    </dependency>
                </dependencies>

mvn spring-boot:run

以上是spring boot 熱部署的方式之一。
還有2種方式,一種是通過下載springbootloaded jar包,在vm中啟動
另外一種 比較複雜可以通過加引數完成啟動。

面試過程中有一個問題比較有意思。
如何通過引數實現開發和生產環境資料庫切換的熱部署。。這個地方懶得百度了,但是是一個很好的知識點,目測是通過熱載入配置檔案。