Spring-loaded實現熱部署-開發環境
Oracle提供的JDK其實已經自帶一定程度的熱載入功能,但是如果你修改了類名,方法名,或者新增了新類,新方法的話。Tomcat都需要重新啟動來使得剛才的更改生效。而JRebel和spring-loaded都能有效地解決這個問題。其中springloaded是開源軟體,可以免費使用。其主頁:https://github.com/spring-projects/spring-loaded
獲取jar包
首先我們需要得到spring-loaded的jar包,上面的github連結中可以下載到。這裡我用的是最新的springloaded-1.2.7.RELEASE.jar
存放位置:D:\springloaded-1.2.7.RELEASE.jar
IDE中部署
開啟專案,在啟動之前按以下進行配置
idea中
在啟動Tomcat之前配置VM option。填寫以下引數:
-javaagent:D:/springloaded-1.2.7.RELEASE.jar -noverify
其中引數中Springloaded的路徑按實際填寫
配置完成後可以啟動專案了
eclipse中
右擊專案->Run as->Run configurations… 在tomcat啟動項新增VM引數
-javaagent:D:/springloaded-1.2.7.RELEASE.jar -noverify
其中引數中Springloaded的路徑按實際填寫
配置完成後可以啟動專案了
測試
為了解Springloaded 適用於哪些更改,下面來作幾個測試
我在上述啟動的SSM專案中,在一個控制器裡新增了以下方法
/**
* 測試SpringLoaded
*/
@RequestMapping("/hello")
@ResponseBody
public String test(){
return "Hello Spring Loaded!";
}
儲存後通過瀏覽器訪問失敗,找不到/hello 這個路徑。通過重啟Tomcat後可以正常訪問test方法
繼續新增test2()方法,不使用註解,為了在瀏覽器中方便測試,通過test()方法來訪問test2()方法。(經過上面重啟Tomcat後test方法可以訪問)
/**
* 測試SpringLoaded
*/
@RequestMapping("/hello")
@ResponseBody
public String test(){
return this.test2();
}
public String test2(){
return "Spring Loaded By Test2";
}
瀏覽器輸出
“Spring Loaded By Test2”
說明我們新增的第二個方法test2()沒有經過重啟伺服器就可以訪問了,熱部署生效
我們繼續 新建一個類,並在test()方法中去呼叫
/**新建類
* Created by JiangWei.Huang
* 2017/8/22 0022.
*/
@RestController
public class TestCtrl {
@GetMapping("/hello3")
public String test3(){
return "TestCtrl-test3";
}
}
/**修改test方法呼叫新建的類TestCtr中的test3方法
* 測試SpringLoaded
*/
@RequestMapping("/hello")
@ResponseBody
public String test(){
TestCtrl testCtrl = new TestCtrl();
return testCtrl.test3();
}
瀏覽器輸出
“TestCtrl-test3”
說明我們新建的類,在不用重啟的情況下也能夠被呼叫到了,熱部署生效
但值得注意的是,我們新建的類中,在類上與方法上都寫了Spring註解,但這裡是也不生效的。@RestController這個註解沒有生效,/hello3這個路徑也是訪問不了的。需要重啟伺服器才生效
另外在Idea中修改後自動儲存但不會自動重新編譯,如果在Idea中修改後熱部署沒有生效,按ctrl+shift+f9重新編譯。也可以設定Idea自動編譯,設定如下圖。
總結
經過上面的測試我們可以得出一些結論。像官方所說,可以實現以下的熱更新
Spring Loaded allows you to add/modify/delete methods/fields/constructors. The annotations on types/methods/fields/constructors can also be modified and it is possible to add/remove/change values in enum types.
Spring載入允許您新增/修改/刪除/欄位/方法建構函式。註釋型別/方法/欄位/建構函式,並且還可以在列舉型別中新增/刪除/更改值。
但是對於第三方像是Spring註解這些的修改,spring-loaded就無能為力了,必須求助於更加強大的,收費的JRebel了
相關文章
- 使用spring-loaded實現應用熱部署Spring熱部署
- 1、CentOS部署Java開發環境CentOSJava開發環境
- MySQL Cluster開發環境快速部署(中文)MySql開發環境
- Vuejs開發環境搭建及熱更新VueJS開發環境
- Hybris開發環境的license計算實現開發環境
- Delphi10.3.3 部署android 開發環境Android開發環境
- django學習之pythonbrew部署開發環境DjangoPython開發環境
- 通過 PHPStorm 配置 Hyperf 熱更新開發環境PHPORM開發環境
- emacs開發環境配置(4)——rust開發環境Mac開發環境Rust
- Vagrant 搭建開發環境實踐開發環境
- 用 Vagrant 一鍵部署開發環境 kafka 叢集開發環境Kafka
- win10+vscode部署java開發環境Win10VSCodeJava開發環境
- 配置開發環境、生成環境、測試環境開發環境
- 熱部署一般用在測試環境, 生產環境用分散式配置中心熱部署分散式
- Java開發--36--Springboot使用dev-tools實現熱部署JavaSpring Bootdev熱部署
- 《Angular2 從開發到部署系列》之「環境搭建」Angular
- 【技術】MediumKube- 快速部署容器雲的開發環境開發環境
- springboot實現熱部署Spring Boot熱部署
- SpringBoot 實現熱部署Spring Boot熱部署
- idea中實現熱部署Idea熱部署
- 部署Java環境Java
- 試用環境開發環境不發郵件開發環境
- 開發環境配置開發環境
- PHP開發環境PHP開發環境
- 一、開發環境開發環境
- phpwamp開發環境搭建詳解,phpwamp綠色整合環境開發環境一鍵搭建PHP開發環境
- EthBox以太坊開發套件,一鍵安裝部署以太坊開發環境套件開發環境
- ubuntu環境下搭建以太坊開發環境Ubuntu開發環境
- tomcat熱部署的實現原理Tomcat熱部署
- 1 – 搭建開發環境開發環境
- react 配置開發環境React開發環境
- PHP 線上開發環境PHP開發環境
- rollup 開發環境搭建開發環境
- js開發環境配置JS開發環境
- 搭建go開發環境Go開發環境
- Androdi開發環境搭建開發環境
- 前端開發環境搭建前端開發環境
- Theia 開發環境搭建開發環境