1. 程式人生 > >SpringBoot構建微服務實戰 之 熱部署(-)

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-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實現熱不部署時可能會出現一些異常。一些異常案例請看本系列。