想从新启动服务器(服务器从新启动花时间),想直接获得(debug)结果.有两种方式热部署 和热加载:
热加载
在server.xml -> context 属性中 设置 reloadable=“true”
热部署
在server.xml -> context 属性中 设置 autoDeploy=“true”
同样可以:<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="xxx" path="/xxx"/>
</Host>
区别
啥玩意
- 热加载:服务器会监听 class 文件改变,包括class,lib,web.xml等文件,若发生更改,则局部进行加载,不清空session ,不释放内存。开发中用的多,但是要考虑内存溢出的情况。
- 热部署:整个项目从新部署,包括你从新打上.war 文件。 会清空session ,释放内存。
原理
-
热加载:在运行时重新加载class,主要使用的是类加载机制,在实现方式上就是在容器启动的时候起一条后台线程,定时的检测类文件的时间戳变化,如果类的时间戳发生变化,则将类重新载入。
-
热部署:直接重新加载整个应用,这种方式会释放内存,比热加载更加干净,但是它比热加载更加的浪费时间。
使用场景
- 热部署:更多的是在生产环境中使用,就是适用于频繁的部署并且启动耗时长的应用、无法停止服务的应用等。
- 热加载:更多的是在开发环境中使用,用于开发,debug中,可以大大的提高开发效率。