Spring boot 兩種熱部署方式 springloader 和 devtools

什麼是熱部署?
熱部署,就是在應用正在運行的時候升級軟件,卻不需要重新啓動應用。在平時編寫代碼的時候,你會發現我們只是簡單把打印信息改變了,就需要重新部署,如果要改變這樣的方式,就需要用到熱部署springloaded。

使用方式,在項目中的pom.xml中plugin裏添加依賴:

<dependencies> 
  <!--springloaded  hot deploy --> 
  <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>springloaded</artifactId> 
      <version>1.2.4.RELEASE</version>
  </dependency> 
</dependencies> 
<executions> 
  <execution> 
      <goals> 
          <goal>repackage</goal> 
      </goals> 
      <configuration> 
          <classifier>exec</classifier> 
      </configuration> 
  </execution> 
</executions>

如果使用的run as,Java application的話,那麼需要做如下處理:

把spring-loader-1.2.4.RELEASE.jar下載下來,放到項目的lib目錄中,點擊下載

CSDN下載地址:http://download.csdn.net/download/a78270528/9950708



然後設置MyEclipse的run參數裏VM參數,點擊Java Application-->HelloController-->Arguments。



填寫springloaded-1.2.4.RELEASE.jar路徑“-javaagent:.\lib\springloaded-1.2.4.RELEASE.jar -noverify”。


點擊run 即可運行項目,再次修改java文件即時生效,我們修改方法的返回值,這樣在run as的時候,也能進行熱部署了。直接訪問就可以得到修改後的結果了。

這裏要注意的是,使用springloader這種方式,這並不是所有的代碼都能夠熱部署的。使用devtools這種方式可以實現大部分代碼的熱部署。

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

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

使用方法:

<!-- spring boot devtools 依賴包. -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
    <scope>true</scope>
</dependency> 
把上面的pom.xml中的pulgin替換成下面的代碼:

<!-- 構建節點-->
<build>
        <plugins>
        <!-- 這是spring boot devtool plugin -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <!--fork :  如果沒有該項配置,肯呢個devtools不會起作用,即應用不會restart -->
                    <fork>true</fork>
                </configuration>
            </plugin>
        </plugins>
</build>

配置完成,重新啓動項目可以試着修改代碼,熱部署成功,方便手動重啓的時間,也加快了開發速度。


說明:
1、devtools會監聽classpath下的文件變動,並且會立即重啓應用(發生在保存時機),注意:因爲其採用的虛擬機機制,該項重啓是很快的。
2、devtools可以實現頁面熱部署(即頁面修改後會立即生效,這個可以直接在application.properties文件中配置spring.thymeleaf.cache=false來實現(這裏注意不同的模板配置不一樣)。


在修改以下代碼都不需要重啓服務器:修改類、配置文件、頁面文件(原理是將spring.thymeleaf.cache設爲false)之後ctrl+s:應用會重啓。


如果不能使用的話,以下就幾種常見的問題:
1、對應的spring-boot版本是否正確,這裏使用的是1.5.3版本;
2、是否加入plugin以及屬性<fork>true</fork>
3、Eclipse Project 是否開啓了Build Automatically(開啓自動編譯的功能)。
4、如果設置SpringApplication.setRegisterShutdownHook(false),則自動重啓將不起作用。


最後,這兩種方式springloader、devtools只需要配置一種即可,建議使用devtools,可以支持更多的代碼熱部署。

發佈了83 篇原創文章 · 獲贊 333 · 訪問量 68萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章