@(工作笔记)

JRebel-record

Alt text

[TOC]


tomcat7插件结合jrebel进行热部署的一些探索

在有一篇文章里面谈到过IDEA集成热部署的一些内容,具体可以查看那篇blog:IDEA集成tomcat7插件。 本篇重点讲解jrebel方面的热部署的内容。

使用 IntelliJ IDEA 插件方式安装JRebel

第一步:本地安装

img

点击settings,然后照着如图所示的步骤进行安装,安装成功后:

img

但是此时是没有激活的,使用时候会弹出如下错误:

img

第二步:注册破解

img

具体破解过程,可以在中具体查看申请得到激活码:申请获取激活码过程

激活后:

img

第三步:使用IDEA进行使用

可以和本地tomcat进行结合使用,但是这个不在我的这篇文章讲解中。

首先,关于热部署引入一下这个概念:

       所谓热部署,就是在应用正在运行的时候升级软件,却不需要重新启动应用。对于Java应用程序来说,热部署就是在运行时更新Java类文件。在基于Java的应用服务器实现热部
署的过程中,类装入器扮演着重要的角色。大多数基于Java的应用服务器,包括EJB服务器和Servlet容器,都支持热部署。类装入器不能重新装入一个已经装入的类,但只要使用一个新的类装入器实例,就可以将类再次装入一个正在运行的应用程序。

\ **

\为什么要使用jrebel?**

​ 回答这个问题前,先看下一下场景:

场景一:

​ 在javaee项目中,你正启动了项目,但是你修改了某个方法中的一个代码片段,此时保存还还用吗?

场景二:

​ 在javaee项目中,你正启动了项目,但是你在某个实类里面添加了新的方法,或者添加的新的类,此时保存后了?

场景一和场景二唯一的不同就是:一个是在已有的架子下重新构建,另一个是添加新的class进行重新构建?

\接下来说说下本地tomcat和jrebel的实际情况:**

​ 本地tomcat余jrebel结合进行运行的时候,会自动重新新的class构建到tomcat服务器中,无论是重新添加的方法或者是类,还是修改某个已有的方法片段。

\为什么要用tomcat7插件和jrebel结合了?**

​ 使用tomcat7插件运行后,只能修改某个方法中的代码片段,不支持创建新的实例或者方法。

maven tomcat7插件和jrebel就能很好的解决这个问题:

集成jrebel中,使用如下方式启动:

img

。。。mvn能右键,才知道,醉了

2017-05-22 18:10:40 JRebel: Contacting myJRebel server ..
2017-05-22 18:10:42 JRebel:  Starting logging to file: C:\Users\Administrator\.jrebel\jrebel.log
2017-05-22 18:10:42 JRebel:  
2017-05-22 18:10:42 JRebel:  #############################################################
2017-05-22 18:10:42 JRebel:  
2017-05-22 18:10:42 JRebel:  JRebel Agent 7.0.8 (201704281043)
2017-05-22 18:10:42 JRebel:  (c) Copyright ZeroTurnaround AS, Estonia, Tartu.
2017-05-22 18:10:42 JRebel:  
2017-05-22 18:10:42 JRebel:  Over the last 2 days JRebel prevented
2017-05-22 18:10:42 JRebel:  at least 14 redeploys/restarts saving you about 0.6 hours.
2017-05-22 18:10:42 JRebel:  
2017-05-22 18:10:42 JRebel:  Licensed to hue jonh (using myJRebel).
2017-05-22 18:10:42 JRebel:  
2017-05-22 18:10:42 JRebel:  
2017-05-22 18:10:42 JRebel:  #############################################################
2017-05-22 18:10:42 JRebel:

每次修改代码后:在重新compile下就可以了!

img


JRebel插件使用详解

简介

JRebel是一套JavaEE开发工具。 Jrebel 可快速实现热部署,节省了大量重启时间,提高了个人开发效率。 JRebel是一款JAVA虚拟机插件,它使得JAVA程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。JRebel使你能即时分别看到代码、类和资源的变化,你可以一个个地上传而不是一次性全部部署。当程序员在开发环境中对任何一个类或者资源作出修改的时候,这个变化会直接反应在部署好的应用程序上,从而跳过了构建和部署的过程,可以省去大量的部署用的时间。

JRebel是一款JVM插件,它使得Java代码修改后不用重启系统,立即生效。 IDEA上原生是不支持热部署的,一般更新了 Java 文件后要手动重启 Tomcat 服务器,才能生效,浪费时间浪费生命。 目前对于idea热部署最好的解决方案就是安装JRebel插件。

安装

第一步:安装插件

在这里插入图片描述

第二步:在线GUID地址:在线生成GUID

网址:在线GUID地址 在这里插入图片描述 如果失效刷新GUID替换就可以!

服务器地址:https://jrebel.qekang.com/{GUID}

第三步:打开jrebel 如下所示面板,选择Connect to online licensing service

在这里插入图片描述 安装成功之后就可以通过JRebel启动项目。这样修改完Java代码后,就可以通过快捷键 Ctrl+shift+F9 而不再需要重启站点这样繁琐浪费时间的操作了。

相关设置

设置成离线工作模式

在这里插入图片描述 在这里插入图片描述

设置自动编译

要想实现热部署,首先需要对Intellij按如下进行设置:

  1. 由于JRebel是实时监控class文件的变化来实现热部署的,所以在idea环境下需要打开自动变异功能才能实现随时修改,随时生效。 在这里插入图片描述
  2. 打开运行时编译

设置compiler.automake.allow.when.app.running

快捷键ctrl+shift+A,搜索:registry 或者 按快捷键 Ctrl+Shift+Alt+/ ,选择 Registry 在这里插入图片描述 在这里插入图片描述

使用

运行项目时要点击图中红框中的按钮,即可运行: 在这里插入图片描述 第一个按钮是Run,第二个按钮是Debug。

修改代码(只测试了Java代码的修改)后,按快捷键 Ctrl + Shift + F9,运行后会提示有变化是否重新加载,选yes。完成加载以后,就已经实现了热更新效果。

JRebel热部署迅速上手

JRebel Maven插件的目的是在Maven构建期间为您的项目生成rebel.xml文件。

会在target目录下生成。。。没说明白,一顿好找

image-20201207090806416

对于Maven项目 特别是在多模块项目的情况下 使用JRebel Maven插件生成rebel.xml配置文件很方便。将以下代码段添加到您的父级pom.xml。该rebel.xml配置文件可以在你的Maven项目的每个单独的子模块产生。

<plugin>
    <groupId>org.zeroturnaround</groupId>
    <artifactId>jrebel-maven-plugin</artifactId>
    <version>1.1.8</version>
    <configuration>
        <!-- 将配置的资源目录也添加到rebel.xml中 -->
        <addResourcesDirToRebelXml>true</addResourcesDirToRebelXml>
        <!--如果设置为true,则生成的rebel.xml将在构建期间在控制台中打印出来,可以立即看到生成的内容。默认为false-->
        <showGenerated>true</showGenerated>
        <!-- 每次都生成新的rebel.xml。如果为false,只在rebel.xml和pom.xml的时间戳不相同的时候,重新生成rebel.xml。默认为false -->
        <!--<alwaysGenerate>true</alwaysGenerate>-->
        <!-- 在单个项目中处理多个模块时,您可以选择跳过为特定模块生成rebel.xml。 只需将以下内容添加到他们的pom.xml中即可 -->
        <!--<skip>true</skip>-->
        <!-- 如果工程师自己自定义的package,则需要主动设置为 jar 或者 war -->
        <!--<packaging>war</packaging>-->
    </configuration>
    <executions>
        <execution>
            <id>generate-rebel-xml</id>
            <phase>process-resources</phase>
            <goals>
                <goal>generate</goal>
            </goals>
        </execution>
    </executions>
</plugin>

配置结束后执行命令mvn jrebel:generate

3. 启动

启动时使用 JRebel 按钮来Run和Debug,会自动在 resources 文件夹中生成rebel.xml文件,文件中配置了Jrebel热加载的时候需要追踪的文件路径及web配置。比如自己需要主动加入 shop-model 模块的路径

<?xml version="1.0" encoding="UTF-8"?>

<!--
  This is the JRebel configuration file. It maps the running application to your IDE workspace, enabling JRebel reloading for this project.
  Refer to https://manuals.zeroturnaround.com/jrebel/standalone/config.html for more information.
-->
<application generated-by="intellij" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.zeroturnaround.com" xsi:schemaLocation="http://www.zeroturnaround.com http://update.zeroturnaround.com/jrebel/rebel-2_1.xsd">

    <classpath>
        <dir name="C:/workspace/song/shop/shop-web/target/classes">
        </dir>
        <dir name="C:/workspace/song/shop/shop-model/target/classes">
        </dir>
    </classpath>

    <web>
        <link target="/">
            <dir name="C:/workspace/song/shop/shop-web/src/main/webapp">
            </dir>
        </link>
    </web>

</application>

4. 最后的配置

如果不做下面的配置,则需要手动编译才会触发热部署(spring boot devtools一样的问题):

  1. 到设置里将 project automatically 勾选上:File -> Settings -> Build,… -> Compiler ,勾选 Build project automatically
  2. Intellij IEDA 使用 ctrl + shift + alt + /快捷键选择 Registry...,勾选 compiler.automake.allow.when.app.running

5. 推荐用法

一般修改java文件后,会自动编译的。但是一般自己主动触发编译会更可控一些:

Ctrl + Shift + F9 编译当前文件 或者 右键-> Recompile ....java

image-20201207091408970


https://blog.csdn.net/qq_39994079/article/details/100010056

img

jrebel+idea 进行热部署配置

results matching ""

    No results matching ""