Oracle提供的JDK其實已經自帶必定程度的熱加載功能,可是若是你修改了類名,方法名,或者添加了新類,新方法的話。Tomcat都須要從新啓動來使得剛纔的更改生效。而JRebel和spring-loaded都能有效地解決這個問題。其中springloaded是開源軟件,能夠無償使用。其主頁: https://github.com/spring-pro...
首先咱們須要獲得spring-loaded的jar包,上面的github連接中能夠下載到。這裏我用的是最新的springloaded-1.2.7.RELEASE.jar存放位置:D:springloaded-1.2.7.RELEASE.jarjava
打開項目,在啓動以前按如下進行配置
在啓動Tomcat以前配置VM option。填寫如下參數:
-javaagent:D:/springloaded-1.2.7.RELEASE.jar -noverifygit
其中參數中Springloaded的路徑按實際填寫github
配置完成後能夠啓動項目了spring
右擊項目->Run as->Run configurations... 在tomcat啓動項添加VM參數
-javaagent:D:/springloaded-1.2.7.RELEASE.jar -noverify瀏覽器
其中參數中Springloaded的路徑按實際填寫tomcat
配置完成後能夠啓動項目了服務器
爲了解Springloaded 適用於哪些更改,下面來做幾個測試
我在上述啓動的SSM項目中,在一個控制器裏 添加瞭如下方法
/** * 測試SpringLoaded */ @RequestMapping("/hello") @ResponseBody public String test(){ return "Hello Spring Loaded!"; }
保存後經過瀏覽器訪問失敗,找不到/hello 這個路徑。經過重啓Tomcat後能夠正常訪問test方法app
繼續添加test2()方法,不使用註解,爲了在瀏覽器中方便測試,經過test()方法來訪問test2()方法。(通過上面重啓Tomcat後test方法能夠訪問)
/** * 測試SpringLoaded */ @RequestMapping("/hello") @ResponseBody public String test(){ return this.test2(); } public String test2(){ return "Spring Loaded By Test2"; }
瀏覽器輸出eclipse
"Spring Loaded By Test2"ide
說明咱們添加的第二個方法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了