SpringBoot構建微服務實戰 之 熱部署(-)
本小結主要學習下Spring boot實現熱部署的兩種方式,這兩種方法分別是使用 Spring Loaded和使用spring-boot-devtools進行熱部署。
-
什麼時熱部署
大家都知道在專案開發過程中,常常會改動頁面資料或者修改資料結構,為了顯示改動效果,往往需要重啟應用檢視改變效果,其實就是重新編譯生成了新的 Class 檔案,這個檔案裡記錄著和程式碼等對應的各種資訊,然後 Class 檔案將被虛擬機器的 ClassLoader 載入。
而熱部署正是利用了這個特點,它監聽到如果有 Class 檔案改動了,就會建立一個新的 ClaassLoader 進行載入該檔案,經過一系列的過程,最終將結果呈現在我們眼前。
-
類載入機制
Java 中的類經過編譯器可以把程式碼編譯為儲存位元組碼的 Class 檔案,該 Class 檔案儲存了各種資訊,最終要載入到虛擬機器中執行使用。類載入機制(摘自《深入理解 Java 虛擬機器》)
虛擬機器把描述類的資料從 Class 檔案載入到記憶體中,並對資料進行校驗、轉換解析和初始化,最終形成可以被虛擬機器直接使用的 Java 型別。
-
Spring Boot 實現熱部署
- 使用 Spring Loaded
-
在pom檔案中新增以下依賴
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>springloaded</artifactId> <version>1.2.6.RELEASE</version> </dependency> </dependencies> </plugin> </plugins> </build>
這次啟動不能直接執行 main 方法了,需要使用
mvn spring-boot:run 啟動,然後隨意在程式碼中寫一個 System.out.println(“Hi”) ,再次呼叫那個方法,會發現控制檯會打印出 Hi。
-
- 使用 Spring Loaded
-
使用 spring-boot-devtools
-
在pom檔案中新增以下依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> <!-- 這個需要為 true 熱部署才有效 --> </dependency>
如果我們想指定讓 devtools 監聽指定資料夾,那麼可以在 application.yml 配置
spring.devtools.restart.additional-paths=your path,注意這裡需要改成 yml 檔案的格式。
-
小結
若使用了Ehcache作為快取在SpringBoot實現熱不部署時可能會出現一些異常。一些異常案例請看本系列。