SpringBoot(二)——熱部署(springloader)
一、問題的提出:
在編寫代碼的時候,有時只是簡單把打印信息改變了,就需要重新部署SpringBoot項目,如果是這樣的編碼方式,那麼我們估計一天下來就真的是打幾個Hello World就下班了。那麼如何解決熱部署的問題呢?那就是springloaded
二、原理
spring-boot-devtools 是一個爲開發者服務的一個模塊,其中最重要的功能就是自動應用代碼更改到最新的App上面去。原理是在發現代碼有更改之後,重新啓動應用,但是速度比手動停止後再啓動還要更快,更快指的不是節省出來的手工操作的時間。
三、深層原理
使用了兩個ClassLoader,一個Classloader加載那些不會改變的類(第三方Jar包),另一個ClassLoader加載會更改的類,稱爲 restart ClassLoader,這樣在有代碼更改的時候,原來的restart ClassLoader 被丟棄,重新創建一個restart ClassLoader,由於需要加載的類相比較少,所以實現了較快的重啓時間(5秒以內)。
四、開發步驟(在上一個例子的基礎上實驗)
1、在pom.xml中添加依賴包
<build>
<plugins>
<!-- 在這裏添加springloader plugin-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin </artifactId>
<dependencies>
<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>
<!-- 這是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>
</plugins>
</build>
2、在運行程序是選擇以下方式:
選中項目,鼠標右鍵——>run as——>Maven Build——>
在Goals 中填寫spring-boot:run——>Run
五、測試
1、在瀏覽器中輸入http://localhost:8089/hello
2、修改HelloController,修改返回值:
將 return "Hello World" 改爲: "Hello World !!!!!!!!!!!!!",並按Ctrl+S保存
3、接着再在瀏覽器去刷新剛剛的頁面