Springboot實現熱部署
所謂的熱部署:比如專案的熱部署,就是在應用程式在不停止的情況下,實現新的部署
而Springboot在我們每次修改完程式碼之後,可能只是修改下列印的資訊,就得重新啟動App類,這樣太浪費時間,有沒有一種修改完程式碼讓程式自動重啟的方法呢,答案是有的:
-
spring-boot-devtools 是一個為開發者服務的一個模組,其中最重要的功能就是自動應用程式碼更改到最新的App上面去。原理是在發現程式碼有更改之後,重新啟動應用,但是速度比手動停止後再啟動還要更快,更快指的不是節省出來的手工操作的時間。
-
其深層原理是使用了兩個ClassLoader,一個Classloader載入那些不會改變的類(第三方Jar包),另一個ClassLoader載入會更改的類,稱為 restart ClassLoader
-
,這樣在有程式碼更改的時候,原來的restart ClassLoader 被丟棄,重新建立一個restart ClassLoader,由於需要載入的類相比較少,所以實現了較快的重啟時間(5秒以內)
新增jar包
-
<dependency>
-
<groupId>org.springframework.boot</groupId>
-
<artifactId>spring-boot-devtools</artifactId>
-
<optional>true</optional>
-
<scope>true</scope>
-
</dependency>
-
新增spring-boot-maven-plugin:
-
<build>
-
<plugins>
-
<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)
測試方法就是新建個類,配置檔案,看程式是否會重新啟動
注意的地方:
如果設定SpringApplication.setRegisterShutdownHook(false),則自動重啟將不起作用。(配置檔案中)
另外說明一點,有的時候json資料在瀏覽器頁面輸出的時候,可能是亂碼,解決方法是:新建一個配置檔案:application.properties
-
spring.http.encoding.force=true
-
spring.http.encoding.charset=UTF-8
-
spring.http.encoding.enabled=true
-
server.tomcat.uri-encoding=UTF-8