`
sammor
  • 浏览: 416112 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

提高开发效率之tomcat免重启(随意更改java代码)

    博客分类:
  • J2EE
阅读更多

     做为了一个java开发人员,总是为因为要增加一个类,或是增加删除一个方法,甚至修改一个小处代码而不得不再次重启服务器。而启动服务器总是那么的浪费时间。一个小时的编程 10 分钟左右,这效率....

    

     而php有java更有优势在于它是动态加载的。而为什么java就不可以呢?

   

     你想要什么?可以加方法?可以加类?可以动态的随意更改java代码又不重启服务器?

 

     现在这些都可以实现了,今天重大发现这些都可以做到了。java也变为和php一样可以动态的更改了。

 

 

今天听到了这么一个发现,觉得确实很好,现在在这里和大家分享下。

 

要做到这样功能需要对本机有所配置一下:

 

安装步骤:

1、 windows 启动安装程序,在控制台输入 :

> java -jar dcevm-0.2-win.jar (路径放到dcevm-0.2-win.jar的文件夹)下面附件下载

等一会儿,这时会出现一个程序框。选择一个jdk,再install。完成后test一下(安装完成没有提示,差不多的时间就点test看一下,如果成功就是安装好了)

 

   安装程序会替换掉 java bin/client/jvm.dll bin/server/jvm.dll ,并将以后的 jvm.dll 备份到相应目录下。还会将 dcevm.jar 加到 lib/ext/ 目录 .

 

2、eclipse端的修改

 

eclipse.ini 文件里面最后加入:(这里面要把原有的部分去掉一些)

-vmargs

-Xms128M

-Xmx512M

-XX:PermSize=64M

-XX:MaxPermSize=512M

-XX:+PrintGCTimeStamps

-XX:+PrintGCDetails

-XX:+TraceClassLoading

-XX:+TraceClassUnloading

-XX:+PrintGCTimeStamps

-XX:+PrintGCDetails

-verbose:gc

-Xloggc:gc.log

 

 

我的修改完之后是这样的

-startup
plugins/org.eclipse.equinox.launcher_1.0.201.R35x_v20090715.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.win32.win32.x86_1.0.200.v20090519
-product
org.eclipse.epp.package.jee.product
--launcher.XXMaxPermSize
256M


-vmargs 
-Xms128M 
-Xmx512M 
-XX:PermSize=64M 
-XX:MaxPermSize=512M 
-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails
-XX:+TraceClassLoading 
-XX:+TraceClassUnloading
-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails
-verbose:gc
-Xloggc:gc.log

 

重启一下eclipse看是否可以正常启动,这样的就配置完成了。

 

接下来是做个小试验。

1、在你的web程序下,debug状态启动tomcat。(注意在要debug状态下

 

当你的程序正常运行后,要你想在改动的地方java代码,更改下,再重新刷下页面就明白了。(如果还是不成功,可以和我交流下)

 

相关文档学习:

1、 http://www.slideshare.net/wangscu/hotspot-hotswap-who-and-who-are-best-freinds

2、http://rdc.taobao.com/team/jm/ (感谢oznyang提供)。

 

p.s:我是在remoteDebug状态下做的,大家试试看哦。

 

有什么问题大家可以提出来,互相学习。

分享到:
评论
47 楼 sswh 2011-01-12  
适用的JDK版本是多少?不会是任意JDK都可以用吧?

JDK1.3、1.4、1.5、1.6都可以??
46 楼 明天的昨天 2011-01-05  
试了几次,在没有安装dcevm时。启动正常。
安装后,一直报错

Caused by: java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(Z)V
45 楼 lovechenxue 2011-01-03  
tomcat的部署中把reload=true去掉的话,当你修改一个类中的方法时,可以不用重启tomcat,但是如果你修改一个已经加载过的字段时,比如一个静态变量,一定会要求你重新启动的,如果这个方法能够让这种情况也不用征订启动的话,那确实效率提高不小,试试先,晚点给结果
44 楼 sswh 2011-01-03  
to jorneyR:

就是下面这种情况,调试过程中经常遇到的:



43 楼 jorneyR 2011-01-02  
sswh 写道
jorneyR 写道
sswh 写道
jorneyR 写道
使用WTP写Web工程,什么配置信息都不用修改,把WTP的autoloading去掉,Debug启动Tomcat就可以实现热加载了,不用这么麻烦的。


你增加一个方法或者字段试试看。不需要重启才怪。

debug状态下,只有修改方法内的代码,才不需要重启。

刚刚试了下,如果添加一个新的方法或者新加入一个新的Servlet,不需要重启Tomcat,会自动加载上下文的变化


在类中新加入方法不需要重启服务器?除非这个类还没有被加载过。

你试试调试一个类,然后在这个类中加一个方法、或者改变这个方法的签名(方法名或者参数列表),你看看是不是Eclipse会提示“热代码替换失败”。

难道你开发中从来没碰到过Eclipse的“热代码替换失败”这种提示???

你说的这个问题从来没有遇到过,我这里一切正常,给类添加,删除方法,增加新的普通类,添加新的Servlet等,都不需要重启服务器。

如果是修改已有方法的内容,立即生效。
如果是新添加方法,Servlet时,不会立即生效,过几秒就会自动加载。

一直都是这么用的,从来没有出现过问题,我用的是Eclipse for J2EE里的WTP
42 楼 sswh 2011-01-02  
jorneyR 写道
sswh 写道
jorneyR 写道
使用WTP写Web工程,什么配置信息都不用修改,把WTP的autoloading去掉,Debug启动Tomcat就可以实现热加载了,不用这么麻烦的。


你增加一个方法或者字段试试看。不需要重启才怪。

debug状态下,只有修改方法内的代码,才不需要重启。

刚刚试了下,如果添加一个新的方法或者新加入一个新的Servlet,不需要重启Tomcat,会自动加载上下文的变化


在类中新加入方法不需要重启服务器?除非这个类还没有被加载过。

你试试调试一个类,然后在这个类中加一个方法、或者改变这个方法的签名(方法名或者参数列表),你看看是不是Eclipse会提示“热代码替换失败”。

难道你开发中从来没碰到过Eclipse的“热代码替换失败”这种提示???
41 楼 calvinlyc 2011-01-02  
jrebel好像也可以,不过是收费的
39 楼 jorneyR 2011-01-01  
HotSwap:“HotSwap”是JPDA(Java Platform Debugger Architecture)中的一个特性,JPDA增强是自Java 2 SDK1.4新增的功能。HotSwap允许将JVM中的类定义替换为新的类定义,这就允许开发人员在debug时,将修改过的class替换JVM中旧有的class,无需重新启动服务器。不过,目前HotSwap只支持对方法body的修改,不支持对类和方法签名的修改(比如修改类名,方法名,方法参数等)。考虑这些限制,也是有理由的,替换类定义,就需要新类和旧类之间有一个关联,这里关联就是类的全名(或许还有其他信息),类名都改了,就不知道替换哪个类了。至于方法签名的修改,应该是考虑到运行时方法的调用,通过方法签名替换已有的方法调用。
38 楼 jorneyR 2011-01-01  
热部署: 就是容器状态在运行的情况下部署或者重新部署整个项目.在这种情况下一般整个内存会清空,重新加载.简单来说就是Tomcat或者其他的web服务器会帮我们重新加载项目.这种方式可能会造成sessin丢失等情况.

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

From: http://hi.baidu.com/shiliangshuai/blog/item/12341cce4449d832b700c8e0.html
37 楼 jorneyR 2011-01-01  
sswh 写道
jorneyR 写道
使用WTP写Web工程,什么配置信息都不用修改,把WTP的autoloading去掉,Debug启动Tomcat就可以实现热加载了,不用这么麻烦的。


你增加一个方法或者字段试试看。不需要重启才怪。

debug状态下,只有修改方法内的代码,才不需要重启。

刚刚试了下,如果添加一个新的方法或者新加入一个新的Servlet,不需要重启Tomcat,会自动加载上下文的变化(这个跟重启还是有很大区别的):
Jan 1, 2011 7:12:22 AM org.apache.catalina.core.StandardContext reload
INFO: Reloading this Context has started,
这个功能好像是每隔10秒就会扫描一次,加载新的变化,但与一发现改变就加载比起来,慢了好多。
36 楼 sammor 2011-01-01  
mercyblitz 写道
hustlxjaw 写道
你这个对配置文件支持怎么样?
jRebel也可以有类似的功能,还不用修改java内容


目前,JRebel可以动态地增加新建的类或资源,DCVM 暂时没有看到。

说句是在话,楼主你已经在不少地方发了吧!卷爷是不是找你谈过这个问题,你懂的!


卷爷?我不知道是什么意思,还有,我只在这地方发的,我只是听说到这个东西。所以贴出来供大家学习而已。
35 楼 linvar 2011-01-01  
tomcat 本来就有个热部署的选项, 类似auto_reload=true就行了
resin也默认有自动检测的功能
...
其他如浮云
34 楼 lvjinhua 2011-01-01  
试了一下,不用修改eclipse配置也可以直接使用。安装完就可以了。
33 楼 mercyblitz 2010-12-31  
hustlxjaw 写道
你这个对配置文件支持怎么样?
jRebel也可以有类似的功能,还不用修改java内容


目前,JRebel可以动态地增加新建的类或资源,DCVM 暂时没有看到。

说句是在话,楼主你已经在不少地方发了吧!卷爷是不是找你谈过这个问题,你懂的!

32 楼 hustlxjaw 2010-12-31  
你这个对配置文件支持怎么样?
jRebel也可以有类似的功能,还不用修改java内容
31 楼 diggywang 2010-12-31  
hotdeploy, 这方面tomcat远没glassfish做得好
30 楼 surprises 2010-12-31  
eclipse3.3.2装wtp插件的启动eclipse出错
The Eclipse executable launcher was unable to locate its companion shared library
29 楼 finallygo 2010-12-31  
我刚才试用了一下,真是太好用了,而且也没有了热代码替换失败的提示框,太谢谢了
28 楼 sammor 2010-12-31  
zhannufeifei 写道
不知道对配置文件和annotation支持怎么样

配置文件我试了一下,好像不行的。

相关推荐

    修改java代码以及js无需重启tomcat

    ### 修改Java代码及JS无需重启Tomcat的知识点详解 #### 一、背景介绍 在软件开发过程中,频繁地启动和停止应用服务器对于提高开发效率是一个不小的障碍。特别是当使用如Apache Tomcat这样的应用服务器时,每次修改...

    修改java 不重启tomcat

    为了解决这个问题,"修改Java代码不重启Tomcat"的技术应运而生,其中JRebel是一款非常著名的工具,它能够实现在不重启Tomcat的情况下热部署修改后的Java代码。 JRebel 是由Zeroturnaround公司开发的一款即时应用...

    编译class不用重启tomcat

    标题“编译class不用重启tomcat”涉及到的是Java开发中的热部署技术,它允许开发者在不重启应用服务器(如Tomcat)的情况下,实时更新代码并看到变化的效果,从而极大地提高了开发效率。这篇博客可能介绍了如何使用...

    Myeclipse中修改类及jsp文件后不用重启tomcat的方法

    然而,需要注意的是,虽然这种方法可以提高开发效率,但在生产环境中,我们通常还是推荐完全重启服务器以确保所有更改都得到正确应用。 至于"struts2报表开发.txt"这个文件名,它可能涉及到Struts2框架的报表开发。...

    tomcat热部署+操作文档,修改任何java后台文件也不需要重启

    "热部署"是开发者在开发过程中的一项重要功能,它允许开发者在不重启服务器的情况下更新应用代码,从而大大提高开发效率。本压缩包提供的“tomcat热部署+操作文档”旨在帮助用户实现这一功能。 首先,我们要理解...

    清空Tomcat中的work目录并重启Tomcat.bat

    综上所述,这个批处理脚本提供了一种自动化的方式来管理Tomcat服务器,它能够帮助开发人员快速清理不再需要的编译文件,并确保新代码的正确加载,从而提高了开发效率和应用的健壮性。同时,这也体现了批处理文件在...

    eclipse修改代码后热部署(不需要重启服务

    然而,每次修改代码后都需要重启服务器以查看更改效果,这无疑降低了开发效率。为了解决这个问题,开发者通常寻求“热部署”解决方案,即在不重启服务器的情况下,能够实时应用代码变更。本篇文章将详细介绍如何在...

    利用Tomcat远程部署解决修改类后重启Tomcat问题

    总结一下,本知识点主要涉及如何利用Tomcat的Manager应用进行远程部署,以及配置Tomcat以实现代码修改后的自动重载,从而提高开发效率。这些技巧对于频繁迭代和调试的项目尤其有用。通过理解并熟练运用这些方法,...

    tomcat6.0 适用与java web 程序的开发服务器

    将Tomcat 6.0与MyEclipse结合使用,开发者可以直接在IDE内调试和部署Web应用,大大提高了开发效率。在MyEclipse中配置Tomcat 6.0,通常需要指定Tomcat的安装路径,并在IDE的服务器视图中启动和管理。 5. **安全管理...

    javarebel不用再反复重启tomcat

    总的来说,JavaRebel通过实时代码更新功能,为Java开发者提供了一种高效的开发环境,减少了在Tomcat上反复重启的次数,从而提高了开发效率。对于大型项目或者需要频繁调试的开发者来说,这是一个不可或缺的工具。...

    IntelliJ IDEA修改了mybatis mapper xml后不用重启tomcat,自动热发布 热更新 热部署.zip

    在开发Java Web应用程序时,尤其是使用Mybatis作为持久层框架的时候,经常遇到的一个问题是:当我们在IntelliJ IDEA中修改了Mapper XML文件后,需要手动重启Tomcat服务器才能看到改动的效果,这无疑降低了开发效率。...

    maven通过tomcat插件,如何运行Java Web项目 支持断点

    总的来说,通过Maven的Tomcat插件,我们可以方便地运行和调试Java Web项目,极大地提高了开发效率。记住,一定要根据你的实际环境调整配置,如Tomcat版本、端口号和服务器认证信息,确保插件能够正确工作。

    myeclipse下tomcat动态加载

    在MyEclipse中配置Tomcat进行动态加载,能够让开发者在不重启服务器的情况下实现应用的热更新,提高开发效率。下面将详细解释这一过程以及相关的技术知识点。 首先,理解"动态加载"的概念。动态加载是指在程序运行...

    idea intellij修改文件后不用重启tomcat的办法

    总的来说,利用JRebel和相关的扩展插件,开发者能够在IntelliJ IDEA中高效地进行开发,无需每次修改代码后都重启Tomcat,从而极大地提高了开发效率和工作流的流畅性。对于大型项目和团队来说,这样的工具无疑是提升...

    idea热部署(更新代码不用重启tomcat).docx

    在软件开发过程中,频繁地启动和停止应用服务器(如Tomcat)来查看代码修改效果不仅耗时,而且降低了开发效率。为此,许多IDE(集成开发环境)如IntelliJ IDEA提供了热部署功能,使得开发者可以在不重启应用的情况下...

    Jrebel 基于TOMCAT实现项目修改热部署

    总的来说,JRebel 是 Java 开发者的一大利器,通过与 Tomcat 集成,可以显著提高开发效率,让开发者更专注于代码编写,而非频繁的重启服务器。通过正确配置 `rebel.xml` 文件,可以确保所有需要热部署的资源都得到...

    tomcat热部署包

    在传统的开发流程中,每次修改Java应用程序后,都需要重新打包、部署到Tomcat并重启服务,这个过程可能耗时较长,且频繁操作会降低开发效率。有了热部署功能,开发者可以快速验证代码变更,加快问题定位和修复速度,...

    Tomcat映射虚拟目录context配置不用重启

    ### Tomcat映射虚拟目录context配置不用重启 在IT领域中,Apache Tomcat是一个免费...这些配置不仅可以提高开发效率,还能有效减少服务器维护的工作量。希望本文能帮助到正在使用Tomcat进行Web应用部署的开发者们。

Global site tag (gtag.js) - Google Analytics