1.热部署和热加载的概念

热部署:就是容器状态在运行的情况下重新部署整个项目.在这种情况下一般整个内存会清空,重新加载.简单来说就是Tomcat或者其他的web服务器会帮我们重新加载项目.这种方式可能会造成sessin丢失等情况.

热加载:就是容器状态在运行的情况下重新加载改变编译后的类.在这种情况下内存不会清空,sessin不会丢失,但容易造成内存溢出,或者找不到方法。因为内存无法转变成对像. 一般改变类的结构和模型就会有异常,在已经有的变量和方法中改变是不会出问题的

在基于Java的实现热部署、热加载的过程中,类装入器扮演着重要的角色。类装入器不能重新装入一个已经装入的类,否则会报java.lang.LinkageError,但只要使用一个新的类装入器实例,就可以将类再次装入一个正在运行的应用程序。一般debug模式都支持热加载。



2.JRebel 热部署



JRebel 的 Eclipse插件地址  http://www.zeroturnaround.com/update-site/update-site.zip


JRebel 是收费的要激活才能用,不过有试用期。

是否启用JRebel可以到Run configurations中设置.

每个要使用JReble的Project都需要单独设置

3.Tomcat 热部署



第一种方式


在tomcat\conf\server.xml中的<host></host>内部添加<context/>标签: 
 <Context debug="0" docBase="D:\demo1\web" path="/demo1" privileged="true" reloadable="true"/>  docBase:项目路径,可以使用绝对路径或相对路径,相对路径是相对于webapps  
 path:访问项目的路径,如:http://127.0.0.1:8080/demo1  
 reloadable:是否自动加载新增或改变的class文件. 
 debug属性与这个Engine关联的Logger记录的调试信息的详细程度。数字越大,输出越详细。如果没有指定,缺省为0。 也就是程序异常时写入日志文件里的详细程度。 第二种方式和第一种差不多,但是不是在Server.xml文件中添加Context标签,而是在  
 %tomcat_home%\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