SpringBoot ------ 应用热部署
Posted Leida_wanglin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot ------ 应用热部署相关的知识,希望对你有一定的参考价值。
SpringBoot ------ 应用热部署
什么是热部署?
热部署,就是咋应用正在运行时的时候升级软件(增加业务/修改bug),却不需要重新启动应用。
在项目开发过程中,常常会改动页面数据或者修改数据结构,为了显示改动效果,往往需要重启应用查看改变效果,其实就是重新编译生成新的Class文件,这个文件里记录着和代码等对应的各种信息,然后Class文件被虚拟机的ClassLoader加载。
而热部署正是利用这个特点,它监听到如果有Class文件改动了,就会创建一个新的ClassLoader进行加载该文件,经过一系列过程,最终将结果呈现在我们眼前,SpringBoot通过配置DevTools工具来达到热部署效果。
在原理上使用了两个ClassLoader,一个ClassLoader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现较快的重启时间。
热部署环境配置与测试
配置 DevTools 环境
修改 pom 文件,添加 DevTools 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<!-- 当前这个项目被继承后, 这个不向下传递 -->
<optional>true</optional>
</dependency>
同时在plugin中添加devtools生效标签
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<fork>true</fork><!-- 如果没有该配置,热部署的devtools不生效 -->
</configuration>
</plugin>
全局配置文件配置
在application.yml 中配置 spring.devtools.restrart.enable=false(true开启热部署), 此时restrart类加载器还会初始化,但不会监视文件更新。
spring:
##热部署配置
devtools:
restart:
enabled: true
#设置重启的目录,添加目录的文件需要restart
additional-paths: src/main/java
#解决项目自动重新编译后接口报404问题
poll-interval: 3000
quiet-period: 1000
IDEA配置
当我们修改了Java类后,IDEA默认是不会自动编译的,而spring-boot-devtools 又是监测classpath下的文件发生变化才会重启应用,所以需要设置IDEA的自动编译。
自动编译配置
File -> Settings ->Compiler -> Build Project automatically
Registry 属性修改
Ctrl + shift +alt + /,选择Registry,勾上Compiler autoMake allow when app running
没有找到Compiler autoMake allow when app running?
最新版本的idea在Settings里面,如下图。
部署完成!
以上是关于SpringBoot ------ 应用热部署的主要内容,如果未能解决你的问题,请参考以下文章