IDE热加载与热部署

  • 热加载则是在运行时通过重新加载class改变类信息,直接改变程序行为。
    • 主要依赖java的类加载机制,在实现方式可以概括为在容器启动的时候起一条后台线程,定时的检测类文件的时间戳变化,如果类的时间戳变掉了,则将类重新载入。对比反射机制,反射是在运行时获取类信息,通过动态的调用来改变程序行为;
  • 热部署就是在服务器运行时重新部署项目,
    • 直接重新加载整个应用,这种方式会释放内存,比热加载更加干净彻底,但同时也更费时间。
  1. JRebel 加载的速度优于 devtools
  2. JRebel 不仅仅局限于 Spring Boot 项目,可以用在任何的 Java 项目中。
  3. devtools 方式的热部署在功能上有限制,方法内的修改可以实现热部署,但新增的方法或者修改方法参数之后热部署是不生效的。

JRebel

JRebel 可实现热加载,节省了大量重启时间,提高了个人开发效率。

虚拟机插件,即时分别看到类和资源的变化,直接反应在部署好的应用程序上,从而跳过了构建和部署的过程

1638962106571-129c794a-fa26-48ea-b974-3a3fa2ebb224.png

激活

安装之后会提示输入license激活。使用下面的网址生成服务器地址GUID

https://www.guidgen.com/

如果失效刷新GUID替换就可以!

选择Team URL的方式激活

服务器地址:<font style="color:rgb(77, 77, 77);">https://jrebel.qekang.com/{GUID}</font>

邮箱:自己的邮箱即可

之后按照提示操作即可。

通过JRebel启动项目。通过快捷键 Ctrl+shift+F9 或者 command + S 使得修改生效。

相关设置

离线工作模式,Work offline

1638962356999-8e97956c-47b2-48d2-9612-cd5b45b5bd22.png

设置自动编译

1638962407325-8fd959cb-f114-42a9-a5a8-bf42318fea3a.png

支持下面的这些类型的文件改变:

  • 改变Java classes文件.
  • 改变框架配置文件 (e.g. Spring XML files and annotations, Struts mappings, etc).
  • 任何静态资源文件 (e.g. JSPs, HTMLs, CSSs, XMLs, .properties, etc)

devtool

https://blog.csdn.net/u013042707/article/details/78648259

原理是在发现代码有更改之后,重新启动应用,但是比速度比手动停止后再启动还要更快,更快指的不是节省出来的手工操作的时间。

其深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为 restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间(5秒以内)。

<dependency>
      <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-devtools</artifactId>
       <optional>true</optional>
       <scope>true</scope>
</dependency>
<build>
  <finalName>www.fitness.manager.com</finalName>
  <plugins>
    <!--用于将应用打成可直接运行的jar(该jar就是用于生产环境中的jar) 值得注意的是,
如果没有引用spring-boot-starter-parent做parent,且采用了上述的第二种方式,
这里也要做出相应的改动 -->
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
      <configuration>
        <!--fork:  如果没有该项配置,devtools不会起作用,即应用不会restart -->
        <fork>true</fork>
      </configuration>
    </plugin>
  </plugins>
</build>

参考链接:

https://www.cnblogs.com/sfnz/p/14157833.html?ivk_sa=1024320u

https://blog.csdn.net/lianghecai52171314/article/details/105637251

https://blog.csdn.net/weixin_44233253/article/details/118788185

posted on 2025-10-14 22:48  chuchengzhi  阅读(42)  评论(0)    收藏  举报

导航

杭州技术博主,专注分享云计算领域实战经验、技术教程与行业洞察, 打造聚焦云计算技术的垂直博客,助力开发者快速掌握云服务核心能力。

褚成志 云计算 技术博客