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实现热部署-开发环境相关推荐

  1. Spring Boot实现热部署

    在Spring Boot实现代码热部署是一件很简单的事情,代码的修改可以自动部署并重新热启动项目. 引用devtools依赖 <dependency><groupId>org. ...

  2. 热部署生产环境java_Spring Boot实现热部署

    在Spring Boot实现代码热部署是一件很简单的事情,代码的修改可以自动部署并重新热启动项目. 引用devtools依赖 org.springframework.boot spring-boot- ...

  3. idea spring boot中热部署 自动更新不用重启服务

    近来在使用idea做springboot的项目,但是发现每次修改之后我都需要重新将项目关闭再开启,这样比较繁琐,发现通过热部署的方式让我们可以一边修改我们的项目,然后在页面中直接通过刷新展示出来 sp ...

  4. Eclipse Spring Boot实现热部署

    spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用. devtool ...

  5. 关于Spring Cloud 框架热部署的方法

    2019独角兽企业重金招聘Python工程师标准>>> 1.在对应的pom.xml 文件中添加依赖 <!--热部署功能-添加依赖 by libingbin2015@aliyun ...

  6. 1. Spring boot 之热部署

    1. spring boot 热部署 1.1. springloaded springloaded可以实现修改类文件的热部署.下载地址:springloaded 安装单击Run Configurati ...

  7. spring boot 调试 - 热部署

    maven gradle Maven: 命令行方式: mvn spring-boot:run -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport= ...

  8. docker部署开发环境

    Linux开发环境配置(Docker) 使用的是 CentOS7 下面命令注意在root用户下运行,避免重复 sudo 省略 复制代码 su - root Docker 安装Docker 参考:Doc ...

  9. springBoot使用spring.profiles.activ区分生产/开发环境

    spring boot 提供 spring boot允许你通过命名约定按照一定的格式(application-{profile}.properties)来定义多个配置文件,然后通过在applicati ...

最新文章

  1. SC-控制Windows服务的命令
  2. python 添加类属性
  3. android aar jar制作,AndroidStudio aar、jar生成及其引用
  4. 机器学习基石-作业三-代码部分
  5. 开源优势_企业开源的10大优势
  6. 初入c++(三)this指针,友元函数,友元类
  7. MySQL游标循环取出空值的BUG
  8. iText的一些总结
  9. 30天敏捷结果(10):发挥你的优势
  10. 如鹏java学习进程 模拟小球弹跳
  11. python美团外卖_美团外卖不满意分析_Python和Excel
  12. 串口 单片机 文件_单片机引脚介绍
  13. python拨号_Python进行ADSL拨号
  14. USB转串口电路之CH340G
  15. 软件史上的10大bug
  16. 数据库关系代数操作与扩展操作
  17. 奶茶杯-市场现状及未来发展趋势
  18. 树莓派(一) 控制LED灯和声音传感器(python)
  19. PlantUML integration
  20. 商场导视系统能为商场运营提供哪些优势?

热门文章

  1. C# 生成 DataMatrix 格式的二维码
  2. 转载:App Store生存法则:iOS开发者经验分享
  3. pubg国际版服务器维护苹果,pubg国际版服务器维护
  4. 十个健脑绝招 锻炼大脑 提高记忆(转)
  5. 编写两个矩阵相乘的方法(Java)
  6. 编写并运行php程序,上传所编写的PHP程序代码,并上传运行后的效果截图
  7. 4G与5G网络有哪些区别
  8. 不使用C/C++标准库实现的浮点数与字符串相互转换(最给力)
  9. MVC 模型-视图-控制器
  10. Linux vi命令大全