主要有两种方式:
spring loaded 可实现修改类文件的热部署,配置起来也比较简单,具体可看其 github 地址上的说明。首先需要获得 spring loaded 的 jar 包,从 spring loaded 的 github 地址可以找到,并且这个地址有说明,可以参考下。
github 地址:https://github.com/spring-projects/spring-loaded
如图所示:可以下载 release 版本,也可以下载其他的版本
我测试的时候下载的是其他版本更高的jar包,从repo.spring.io进去,根据地址目录去找,
- https://repo.spring.io/libs-snapshot/org/springframework/springloaded
下载的是 1.2.9 的版本,然后可以参考 github 上,我是在项目根目录新建 lib 包,然后把下载好的 jar 包放在 lib 下,命令是:
- -javaagent:.\lib\springloaded-1.2.9.jar -noverify
然后启动之后就可以测试啦,改动 java 文件后点 rebuild project,就可以看到效果了。
spring-boot-devtools 是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改到最新的App上面去。原理是在发现代码有更改之后,重新启动应用,但是速度比手动停止后再启动还要更快,更快指的不是节省出来的手工操作的时间。
其深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为 restart ClassLoader ,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间。
spring-boot-devtools 是一个为开发者服务的模块,可以实现 Spring Boot 热部署,其中最重要的功能就是自动将应用代码更改到最新的 App 上面去。
spring-boot-devtools 可以实现页面热部署,实现类文件热部署(类文件修改后不会立即生效),实现对属性配置文件的热部署。其原理是 spring-boot-devtools 会监听 Classpath 下的文件变动,并且会立即重启应用(发生在保存时机)。
由于采用的虚拟机机制,重启的时候只是加载了在开发的 Class,没有重新加载第三方的 JAR 包,所以重启是很快的。