SpringBoot 實現熱部署

HuDu發表於2021-02-27

前言

在實際開發過程中,每次修改程式碼就得將專案重啟,重新部署,對於一些大型應用來說,重啟時間需要花費大量的時間成本。對於一個後端開發者來說,重啟過程確實很難受啊。在 Java 開發領域,熱部署一直是一個難以解決的問題,目前的 Java 虛擬機器只能實現方法體的修改熱部署,對於整個類的結構修改,仍然需要重啟虛擬機器,對類重新載入才能完成更新操作。下面我=我們就看看對於簡單的類修改的熱部署怎麼實現。

原理

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

開始配置

在pom.xml中新增依賴

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--devtools熱部署-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
            <scope>true</scope>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork>
                </configuration>
            </plugin>
        </plugins>
    </build>

devtools的配置

在application.yml中配置一下devtools

spring:
  devtools:
    restart:
      enabled: true  #設定開啟熱部署
      additional-paths: src/main/java #重啟目錄
      exclude: WEB-INF/**
  freemarker:
    cache: false    #頁面不載入快取,修改即時生效

IDEA中配置

當我們修改了類檔案後,idea不會自動編譯,得修改idea設定。

  • (1)File-Settings-Compiler-Build Project automatically
  • (2)ctrl + shift + alt + / ,選擇Registry,勾上 Compiler autoMake allow when app running

SpringBoot 實現熱部署

SpringBoot 實現熱部署

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章