SrpingBoot 熱啟動與熱部署
阿新 • • 發佈:2019-01-30
前言:最近面試幾家公司,面試一般都會問到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中啟動
另外一種 比較複雜可以通過加引數完成啟動。
面試過程中有一個問題比較有意思。
如何通過引數實現開發和生產環境資料庫切換的熱部署。。這個地方懶得百度了,但是是一個很好的知識點,目測是通過熱載入配置檔案。