Spring-loaded實現熱部署-開發環境

Oracle提供的JDK其實已經自帶必定程度的熱加載功能,可是若是你修改了類名,方法名,或者添加了新類,新方法的話。Tomcat都須要從新啓動來使得剛纔的更改生效。而JRebel和spring-loaded都能有效地解決這個問題。其中springloaded是開源軟件,能夠無償使用。其主頁: https://github.com/spring-pro...

獲取jar包

首先咱們須要獲得spring-loaded的jar包,上面的github連接中能夠下載到。這裏我用的是最新的springloaded-1.2.7.RELEASE.jar

存放位置:D:springloaded-1.2.7.RELEASE.jarjava

IDE中部署

打開項目,在啓動以前按如下進行配置

idea中

在啓動Tomcat以前配置VM option。填寫如下參數:

​ -javaagent:D:/springloaded-1.2.7.RELEASE.jar -noverifygit

其中參數中Springloaded的路徑按實際填寫github

Markdown

配置完成後能夠啓動項目了spring


eclipse中

右擊項目->Run as->Run configurations... 在tomcat啓動項添加VM參數

​ -javaagent:D:/springloaded-1.2.7.RELEASE.jar -noverify瀏覽器

其中參數中Springloaded的路徑按實際填寫tomcat

Markdown

配置完成後能夠啓動項目了服務器

測試

爲了解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自動編譯,設置以下圖。

Markdown

總結

通過上面的測試咱們能夠得出一些結論。像官方所說,能夠實現如下的熱更新

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了

相關文章
相關標籤/搜索