热部署

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

posted @   lwx_R  阅读(569)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示