基本原理
在应用运行的时候升级软件,无需重新启动的方式有两种,热部署和热加载。
它们之间的区别是:
1、部署方式:
- 热部署 整个项目重新部署,会清空session ,释放内存。
- 热加载 服务器会监听 class 文件改变,包括web-inf/class,wen-inf/lib,web-inf/web.xml等文件,若发生更改,则局部进行加载,不清空session ,不释放内存。
2、实现原理:
- 热部署直接重新加载整个应用,这种方式会释放内存,比热加载更加干净,但是它比热加载更加的浪费时间。
- 热加载在运行时重新加载class,主要使用的是类加载机制,在实现方式上就是在容器启动的时候起一条后台线程,定时的检测类文件的时间戳变化,如果类的时间戳发生变化,则将类重新载入。
3、使用场景:
- 热部署更多的是在生产环境中使用,就是适用于频繁的部署并且启动耗时长的应用、无法停止服务的应用等。
- 热加载则更多的是在开发环境中使用,用于开发,debug中,可以大大的提高开发效率。
配置方式
- 热部署
<Context docBase="xxx" path="/xxx" autoDeploy="true"/>
- 热加载
<Context docBase="xxx" path="/xxx" reloadable="true"/>
IDEA热部署
- jrebel 插件
- 修改服务器配置:菜单Run -> EditConfiguration , 然后配置指定服务器下,右侧server标签下on frame deactivation = Update classes and resource。