1. 程式人生 > >Springboot實現熱部署

Springboot實現熱部署

所謂的熱部署:比如專案的熱部署,就是在應用程式在不停止的情況下,實現新的部署

而Springboot在我們每次修改完程式碼之後,可能只是修改下列印的資訊,就得重新啟動App類,這樣太浪費時間,有沒有一種修改完程式碼讓程式自動重啟的方法呢,答案是有的:

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

  2. 其深層原理是使用了兩個ClassLoader,一個Classloader載入那些不會改變的類(第三方Jar包),另一個ClassLoader載入會更改的類,稱為 restart ClassLoader

  3. ,這樣在有程式碼更改的時候,原來的restart ClassLoader 被丟棄,重新建立一個restart ClassLoader,由於需要載入的類相比較少,所以實現了較快的重啟時間(5秒以內)

新增jar包

  1. <dependency>

  2. <groupId>org.springframework.boot</groupId>

  3. <artifactId>spring-boot-devtools</artifactId>

  4. <optional>true</optional>

  5. <scope>true</scope>

  6. </dependency>

  1. 新增spring-boot-maven-plugin:

  2. <build>

  3. <plugins>

  4. <plugin>

  5. <groupId>org.springframework.boot</groupId>

  6. <artifactId>spring-boot-maven-plugin</artifactId>

  7. <configuration>

  8. <!--fork : 如果沒有該項配置,肯定devtools不會起作用,即應用不會restart -->

  9. <fork>true</fork>

  10. </configuration>

  11. </plugin>

  12. </plugins>

  13. </build>

說明一下:

  1. 1. devtools會監聽classpath下的檔案變動,並且會立即重啟應用(發生在儲存時機),注意:因為其採用的虛擬機器機制,該項重啟是很快的。

  2. 2. devtools可以實現頁面熱部署(即頁面修改後會立即生效,這個可以直接在application.properties檔案中配置spring.thymeleaf.cache=false來實現(這裡注意不同的模板配置不一樣)

實現:

  1. 修改類-->儲存:應用會重啟

  2. 修改配置檔案-->儲存:應用會重啟

  3. 修改頁面-->儲存:應用會重啟,頁面會重新整理(原理是將spring.thymeleaf.cache設為false)

測試方法就是新建個類,配置檔案,看程式是否會重新啟動

注意的地方:

如果設定SpringApplication.setRegisterShutdownHook(false),則自動重啟將不起作用。(配置檔案中)

另外說明一點,有的時候json資料在瀏覽器頁面輸出的時候,可能是亂碼,解決方法是:新建一個配置檔案:application.properties

  1. spring.http.encoding.force=true

  2. spring.http.encoding.charset=UTF-8

  3. spring.http.encoding.enabled=true

  4. server.tomcat.uri-encoding=UTF-8