参考文献:
https://blog.csdn.net/qq_42685050/article/details/81588584
https://juejin.cn/post/6844904121821036552
https://blog.csdn.net/lisheng19870305/article/details/94620716
近来在使用idea做springboot的项目,但是发现每次修改之后我都需要重新将项目关闭再开启,这样比较繁琐,发现通过热部署的方式让我们可以一边修改我们的项目,然后在页面中直接通过刷新展示出来
spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用。
devtools的原理
深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间。
这里我没有把所有的方式都尝试一遍,只是使用了devtools的方式
总的来说,一共需要两个步骤:
第一步、先设置我们的pom.xml文件,加入依赖
首先是把下面代码在<dependencies>中
<!--添加热部署--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> <scope>true</scope> </dependency>
另外下面的代码是放在<build> 下面<plugins>里的
<plugin> <!--热部署配置--> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <!--fork:如果没有该项配置,整个devtools不会起作用--> <fork>true</fork> </configuration> </plugin>
第二步、设置IDEA的自动编译:
(1)File-Settings-Compiler勾选 Build Project automatically
(2)快捷键 ctrl + shift + alt + /,选择Registry,勾上 Compiler autoMake allow when app running
这样我们的热部署就完成了,可以再我们的项目中修改返回值,或者修改Mapping的value值后,在我们的页面中刷新试试,
我们的修改已经生效了,不用通过再关闭再开启项目查看了。
spring-boot-devtools 介绍
-
spring-boot-devtools
是一个为开发者服务的模块,可以实现 Spring Boot 热部署,其中最重要的功能就是自动将应用代码更改到最新的 App 上面去。 -
spring-boot-devtools
可以实现页面热部署,实现类文件热部署(类文件修改后不会立即生效),实现对属性配置文件的热部署。其原理是spring-boot-devtools
会监听 Classpath 下的文件变动,并且会立即重启应用(发生在保存时机)。 -
由于采用的虚拟机机制,重启的时候只是加载了在开发的 Class,没有重新加载第三方的 JAR 包,所以重启是很快的。
配置热部署
- 在 pom.xml 文件中,添加项目
spring-boot-devtools
依赖
<!--热部署依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <!--没有该项配置,热部署不会起作用--> <configuration> <fork>true</fork> </configuration> </plugin>
- 在资源文件
application.properties
中进行热部署的相关配置
# 页面修改后立即生效,关闭缓存,立即刷新 spring.thymeleaf.cache=false # 热部署生效 spring.devtools.restart.enabled=true # 设置需要重启的目录 spring.devtools.restart.additional-paths=src/java/main # 设置不需要重启的目录 spring.devtools.restart.exclude=static/**,public/**,WEB-INF/** # 为 mybatis 设置,生产环境可删除 # restart.include.mapper=/mapper-[\w-\.]+jar # restart.include.pagehelper=/pagehelper-[\w-\.]+jar
当热部署搭建完成后,程序只要启动一次即可,后面修改代码时,只需保存后便可以触发热部署机制,自动重启服务。
设置 IDEA 环境自动编译
在使用 IDEA 编译器时,需要设置自动编译。
- 在编译器选项中勾选
Build project automatically
选项
- 使用快捷键:
Ctrl + Alt + Shift + /
调出 Registry 窗口,勾选compiler.automake.allow.when.app.running
选项
源码地址
具体步骤
一、开启IDEA的自动编译(静态)
具体步骤:打开顶部工具栏 File -> Settings -> Default Settings -> Build -> Compiler 然后勾选 Build project automatically 。
二、开启IDEA的自动编译(动态)
具体步骤:同时按住 Ctrl + Shift + Alt + / 然后进入Registry ,勾选自动编译并调整延时参数。
- compiler.automake.allow.when.app.running -> 自动编译
- compile.document.save.trigger.delay -> 自动更新文件
PS:网上极少有人提到compile.document.save.trigger.delay 它主要是针对静态文件如JS CSS的更新,将延迟时间减少后,直接按F5刷新页面就能看到效果!
三、开启IDEA的热部署策略(非常重要)
具体步骤:顶部菜单- >Edit Configurations->SpringBoot插件->目标项目->勾选热更新。
image.png
四、在项目添加热部署插件(可选)
温馨提示:
如果因为旧项目十分臃肿,导致热重启很慢而影响开发效率,笔者建议直接在POM移除spring-boot-devtools
依赖,然后使用Control+Shift+F9进行免启动快速更新!!
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> </dependency>
五、关闭浏览器缓存(重要)
打开谷歌浏览器,打开F12的Network选项栏,然后勾选【✅】Disable cache 。