• 热加载则是在运行时通过重新加载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秒以内)。

1
2
3
4
5
6
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
<scope>true</scope>
</dependency>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<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