1、 热部署:就是容器状态在运行的情况下重新部署整个项目.在这种情况下一般整个内存会清空,重新加载.简单来说就是Tomcat或者其他的web服务器会帮我们重新加载项目.这种方式可能会造成session丢失等情况。
2、热加载:就是容器状态在运行的情况下重新加载改变编译后的类.在这种情况下内存不会清空,sessin不会丢失,但容易造成内存溢出,或者找不到方法。因为内存无法转变成对像. 一般改变类的结构和模型就会有异常,在已经有的变量和方法中改变是不会出问题的。
eclipse配置热启动:
在基于Java的实现热部署、热加载的过程中,类装入器扮演着重要的角色。类装入器不能重新装入一个已经装入的类,否则会报java.lang.LinkageError,但只要使用一个新的类装入器实例,就可以将类再次装入一个正在运行的应用程序。一般debug模式都支持热加载。
但我在这里遇到了eclipse使用debug启动却并没有热加载的状况,这样对于开发来说是非常耗时的,因为每更改一次class文件都需要重新编译。下面我就如何使用eclipse进行热加载,做一个简单介绍:
启动eclicpse 找到下面这个目录
打开server.xml,找到
<Context docBase="dreamlive" path="/ROOT" reloadable="true" crossContext="true" source="org.eclipse.jst.jee.server:dreamlive"/>
这行代码,在你部署新项目的时候,docBase和source会随着改变,现在还是热部署的状态,这样每次更改class文件都会自动的去编译,比较耗时,接下来我们更改一下配置:
<Context docBase="dreamlive" path="/ROOT" reloadable="false" crossContext="true" source="org.eclipse.jst.jee.server:dreamlive"/></Host>
这里将reloadable改为false,添加crossContext="true",这样就能进行 热启动 了,注意:需要用debug启动
不过我们需要在每次部署新项目的时候,重新去更改这个配置,我们可以观察每次部署新项目的时候,server.xml这个文件的动态变化,设置完成之后如果启动项目热加载并没有生效,那么勾选eclipse-->project-->Build Automatically,加上自动编译。
下面附上每个属性的含义
- path 指出你的访问路
- docBase指出你的存放路径
- debug 为设定debug的等级0提供最少的信息,9提供最多的信息
- reloadable=true时 当web.xml或者class有改动的时候都会自动重新加载不需要从新启动服务
- crosscontext="true"表示配置的不同context共享一个session(可以不配置)
Tomcat配置热启动
热部署是指在你修改项目BUG的时候对JSP或JAVA类进行了修改在不重启WEB服务器前提下能让修改生效。但是对配置文件的修改除外!
1、直接把项目web文件夹放在webapps里。
2、在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。 也就是程序异常时写入日志文件里的详细程度。
3、第三种方式和第二种差不多,但是不是在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
=========================================================================================
还有一种方式:使用第三方工具
http://www.zeroturnaround.com/jrebel/
1、解压缩包
2、执行java -jar jrebel-setup.jar
3、会弹出一个安装界面(自己看,很好懂)
4、在MyEclipse中配置,找到服务器(如tomcat)的配置页面,在tomcat的jdk配置页面的Optional Java VM arguments输入框中加如下参数:
-noverify -javaagent:D:\dev\JRebel\jrebel.jar -Drebel.dirs=D:\dev\apache-tomcat-6.0.20\webapps\nmr
第一个路径是jar包的绝对路径,第二个地址是说想让哪个目录下的类更改后不重启服务。
如果Optional Java VM arguments输入框中有其他参数,用空格隔开。
5、发布项目,就能在控制台看到效果。
类就可以改变之后不用重启tomcat。
目前流行的服务器都支持。详细看官方网站。
下载的压缩包文件名为jrebel-setup.zip (7.8 MB)
可参考:http://japankn.javaeye.com/blog/577931