热部署
1.什么是热部署
热部署,就是在应用正在运行的时候升级软件(增加业务/修改bug),却不需要重新启动应用
在项目开发过程中,常常会改动页面数据或者修改数据结构,为了显示改动效果,往往需要重启应用查看改变效果,
其实就是重新编译生成了新的Class文件,这个文件里记录着和代码等对应的各种信息,然后Class文件将被虚拟机的ClassLoader加载。
而热部署正是利用了这个特点,它监听到如果有Class文件改动了,就会创建一个新的ClaassLoader进行加载该文件,
经过一系列的过程,最终将结果呈现在我们眼前,Spring Boot通过配置DevTools工具来达到热部署效果。
在原理上是使用了两个ClassLoader, 一 个Classloader加载那些不会改变的类(第三方Jar包) .另一个
ClassLoader加载会更改的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader
被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间。
devtools可以实现页面热部署(即页面修改后会立即生效,这个可以直接在application.properties
置spring.thymeleaf.cache=false来实现),实现类文件热部署(类文件修改后不会立即生效),实现对属性文件
的热部署。即devtools会监听classpath下的文件变动, 并且会立即重启应用(发生在保存时机), 注意:因为其
采用的虚拟机机制,该项重启是很快的。配置了 后在修改java文件后也就支持了热启动,不过这种方式是属于项
目重启(速度比较快的项目重启), 会清空session中的值, 也就是如果有用户登陆的话,项目重启后需要重新登
陆。
默认情况下,/META-INF/maven, /META-INF/resources, /resources, /static, /templates, /public这些
文件夹下的文件修改不会使应用重启,但是会重新加载(devtools内嵌了 -个LiveReload server,当资源发生改
变时,浏览器刷新)
2.pom.xml配置
<!-- 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>
3.application.yml配置
spring:
devtools:
restart:
enabled: true
#设置重启的目录,添加目录文件需要restart
additional-paths: src/main/java
#解决项目自动重新编译后接口报404
poll-interval: 3000
quiet-period: 1000
4.idea配置
勾选
勾选
对于低版本的idea: ctrl+shift+alt+/ 选择registry 勾选compiler.automake.allow.when.app.running
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律