IDEA整合jrebel实现热部署

来源:互联网 发布:伊东祐亨 知乎 编辑:程序博客网 时间:2024/04/28 00:38

关于Java热部署:

这是Java作为编译型语言的硬伤,避无可避的生死劫.

下面转一些语言的热部署对比:

在 Java 开发领域,热部署一直是一个难以解决的问题,目前的 Java 虚拟机只能实现方法体的修改热部署,
对于整个类的结构修改,仍然需要重启虚拟机,对类重新加载才能完成更新操作。 而PHP在开发时就友好多了,修改代码立即生效。
在生产环境运行时,开启了OPcache,只要设定了opcache.revalidate_freq=60,在60秒后修改的代码同样会自动生效。

热部署/热插拔(HotSwap)是在不重启 Java 虚拟机的前提下,能自动侦测到 class 文件的变化,更新运行时 class 的行为。
Java 类是通过 Java 虚拟机加载的,某个类的 class 文件在被 classloader 加载后,会生成对应的 Class
对象,之后就可以创建该类的实例。 默认的虚拟机行为只会在启动时加载类,如果后期有一个类需要更新的话,单纯替换编译的 class
文件,Java 虚拟机是不会更新正在运行的 class。 如果要实现热部署,最根本的方式是修改虚拟机的源代码,改变 classloader
的加载行为,使虚拟机能监听 class 文件的更新,重新加载 class 文件, 这样的行为破坏性很大,为后续的 JVM
升级埋下了一个大坑。

在进行Java
Web程序开发过程中,经常遇到这种问题,修改一个java文件(*.java),需要重启Web服务器(如Tomcat等),部署项目。而重启服务浪费了大量的时间。在小项目中,也许我们感觉不到。但对于大型项目:如数据中心,生产等系统开发而言,往往起/停需要等待几分钟时间。更浪费时间的是,对于一个类中的方法的调试过程,如果修改多次,Tomcat需要反复重载容器,那么浪费的时间更多。

使用过Hibernate,
Spring或其他大型组件,写过50个类以上的Web应用程序的开发者应该知道,当系统中有很多类时,如果开启了Tomcat的reloadable=true,那么每当相关文件改变时,Tomcat会停止Web应用并释放内存,然后重新加载Web应用,这实在是个浩大的工程。

配置Tomcat不因为类的修改重新加载容器,如果你只是修改了类的实现(方法体内的代码),而不是添加或删除类的方法和成员变量,
不需要重启Tomcat,代码就能生效,因为class被更新了,以后新建的instance自然跟着更新.
不过Java中旧的驻留在内存的instance个人认为不会得到更新.而PHP则不存在这些问题,因为每次请求完成,即释放所有资源.
如果PHP文件没有改变,操作系统将会从磁盘缓存(内存)里读取数据并响应新的请求.

Tomcat设置reloadable=”true”后,会监视在WEB-INF/classes和WEB-INF/lib目录class文件的改动.如果监视到有class文件被更新,Tomcat会重新加载整个Web应用,当项目庞大时,重载的类(包括框架)就非常多,重载时间就会变长,因此造成服务中断,自然也就谈不上”热部署”.Tomcat的reloadable=”true”只建议在开发环境中使用,切勿生产环境.

编写类->编译类->Tomcat重载整个项目的类(项目庞大,类非常多,包括框架)->服务中断->无法热部署

JRebel是一款商业付费的JVM插件,它使得JAVAer能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响.
JRebel使你能即时分别看到代码,类和资源的变化,你可以一个个上传而不是一次性全部部署.
当程序员在开发环境中对任何一个类或者资源作出修改的时候,这个变化会直接反应在部署好的应用程序上, 从而跳过了构建和部署的过程.

idea安装jrebel

  1. 打开idea,按ctrl + alt + s 调出设置界面,plugins-Browse
    repositories-输入jrebel回车,找到jrebel for IntelliJ,点击右侧安装按钮,安装完毕点击restart
    IntelliJ重启生效。
  2. 根据安装的jrebel的版本,在网上找个相应的破解文件如: [zip文件] jrebel6.5.2 破解文件
    然后按照操作说明进行破解。
  3. 破解后打开IDEA, 在Edit configurations中配置on update action: redepoly和on
    frame deactivation :Update classes and resources两项,然后选择run with
    Jrebel 启动即可
0 0
原创粉丝点击