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.jarIDE中部署打开项目,在启动之前按以下进行配置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")@ResponseBodypublic 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. */@RestControllerpublic class TestCtrl { @GetMapping("/hello3”) public String test3(){ return “TestCtrl-test3”; }}/**修改test方法调用新建的类TestCtr中的test3方法 * 测试SpringLoaded */@RequestMapping("/hello")@ResponseBodypublic 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了