進行springboot的web開發過程中,我們很多時候經常需要重啓web服務器才能保證修改的源代碼文件、或者諸如xml的配置文件、以及一些靜態文件生效,這樣耗時又低效。我們可以採用熱部署的方式解決此類問題。熱部署是指我們不需要重啓web server就可以保證各項文件修改的立即生效。
springboot有三種實現熱部署方式:
1. 使用springloaded配置pom.xml文件,使用mvn spring-boot:run啓動
2. 使用springloaded本地加載啓動,配置jvm參數
-javaagent:<jar包地址> -noverify
3. 使用devtool工具包,操作簡單,但是每次需要重新部署
第一種:
1. 原來的pom.xml文件中添加如下配置
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
<version>1.2.8.RELEASE</version>
</dependency>
注意:需要在spring-boot-maven-plugin中添加dependency
2. 啓動方式變爲maven啓動
在項目文件夾dos窗口輸入命令:mvn spring-boot:run
注意:停止服務只能使用ctrl+c,如果設置後臺啓動,需要kill進程
第二種:
1. 第二種和第一種採用的同樣方式,不過需要將spring-loaded下載下來,
將下面這局代碼放到VM arguments中,如圖:
-javaagent:D:\maven_jar\springloaded-1.2.8.RELEASE.jar -noverify
注意:紅色字爲你的jar包所在位置
解釋: -javaagent:命令後面跟冒號,意爲是在執行main方法之前執行特定代碼
-noverify關閉java字節碼校驗功能
然後直接run啓動就行了。
第三種:
1. 在pom.xml中添加一個熱部署依賴,
<!-- 熱部署 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
啓動項目即可。
小結:
在開發測試環境下可取第三種,方便快捷。
在生產環境下,建議使用第二種,使用腳本啓動。
springboot實現熱部署的原理:
深層原理是使用了兩個ClassLoader,一個ClassLoader加載那些不會改變的類(第三方jar包),另一個ClassLoader加載會更改的類,稱爲restart ClassLoader ,這樣在有代碼更改的時候,原來的restart ClassLoader被丟棄,重新建一個restart ClassLoader,由於需要加載的類相比較少,所以實現了較快的重啓時間。
如有不足,歡迎留言指正,望不吝賜教。。。