我在项目开发过程中,经常要改动Java 文件,但是又不想从新启动服务器(服务器从新启动花时间),想直接获得(debug)结果.有两种方式热部署 和热加载:
热部署更多的是在生产环境中使用,就是适用于频繁的部署并且启动耗时长的应用、无法停止服务的应用等。
开发环境则直接在Eclipse的Server里面直接配置publishing,默认有这功能
配置tomcat实现热部署与热加载的方式
一、在tomcat的webapps中新建一个与项目名相同的文件,并把项目下WebContent文件夹下的内容剪切到刚刚新建的文件夹中。这是tomcat自带的热部署。
二、在tomcat\conf\server.xml中的Host标签中加上一个配置。
1)热加载:在server.xml -> context 属性中 设置 reloadable=“true”
<Context docBase="xxx" path="/xxx" reloadable="true"/>
2) 热部署:在server.xml -> context 属性中 设置 autoDeploy=“true”
<Context docBase="xxx" path="/xxx" autoDeploy="true"/>
同样可以:
代码
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="xxx" path="/xxx"/>
</Host>
三、在tomcat\conf\catalina\localhost中添加一个xml文件
如:demo1.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="D:\demo1\web" reloadable="true" />
只是缺少了path属性,如果你硬写个path="demo2"的话,是没有用的,tomcat不明确的告诉你:“我不认得”,
这种方式服务器会使用xml文件的名字作为path属性的名字,SO访问地址为:http://localhost:8080/demo1
区别:
热加载:服务器会监听 class 文件改变,包括web-inf/class,wen-inf/lib,web-inf/web.xml等文件,若发生更改,则局部进行加载,不清空session ,不释放内存。开发中用的多,但是要考虑内存溢出的情况。
热部署: 整个项目从新部署,包括你从新打上.war 文件。 会清空session ,释放内存。项目打包的时候用的多。