Springboot實現熱部署-devtools
阿新 • • 發佈:2018-12-25
所謂的熱部署:比如專案的熱部署,就是在應用程式在不停止的情況下,實現新的部署
而Springboot在我們每次修改完程式碼之後,可能只是修改下列印的資訊,就得重新啟動App類,這樣太浪費時間,有沒有一種修改完程式碼讓程式自動重啟的方法呢,答案是有的:
- spring-boot-devtools 是一個為開發者服務的一個模組,其中最重要的功能就是自動應用程式碼更改到最新的App上面去。原理是在發現程式碼有更改之後,重新啟動應用,但是速度比手動停止後再啟動還要更快,更快指的不是節省出來的手工操作的時間。
- 其深層原理是使用了兩個ClassLoader,一個Classloader載入那些不會改變的類(第三方Jar包),另一個ClassLoader載入會更改的類,稱為 restart ClassLoader
- ,這樣在有程式碼更改的時候,原來的restart ClassLoader 被丟棄,重新建立一個restart ClassLoader,由於需要載入的類相比較少,所以實現了較快的重啟時間(5秒以內)
- <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