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了