springboot熱部署(springloader和devtools)


注意:默認使用Maven項目。

springloader方式:首先在pom.xml中添加依賴

<!-- 構建節點 -->
  <build>
      <plugins>
          <!-- 在這里添加springloader plugin-->
          <plugin>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-maven-plugin</artifactId>
              <dependencies>
                  <!-- springboaded 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>
          </plugin>
      </plugins>
  </build>

 

然后啟動,啟動有兩個方式:

方式1:右鍵 -> run as --> Maven build ,在Goals中輸入spring-boot:run  ,然后run 即可熱啟動,此種方式有一個缺點那就是停止服務后端口仍占用,必須在任務管理器中關閉進程。

 

方式2:下載所需jar包(spring-loader-1.2.4.RELEASE.jar),添加到項目。 在項目右鍵 run as --> Run configurations --> Arguments 中,設置VM arguments: -javaagent:.\lib\springloaded-1.2.4.RELEASE.jar -noverify

然后啟動

springloader方式只對修改返回值有效,而對添加方法無效。

 

========================================================================

devtools方式:

首先添加依賴,

<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
        <scope>true</scope>
    </dependency>

然后添加plugin

                <!-- 熱部署2: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>            

 

然后啟動即可。

原理是修改后服務會快速重啟,深層原理是使用了兩個classloader,一個classloader加載那些不會改變的類,另一個classloader加載會更改的類,成為restart Classloader。

這樣代碼有更改的時候,原來的restart Classloader被丟棄,重新創建一個restart Classloader,由於需要加載的類比較少,所以實現了較快的重啟時間(5s以內)。

對於添加方法仍有效。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM