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 ------ 应用热部署的主要内容,如果未能解决你的问题,请参考以下文章

springboot项目利用devtools实现热部署,改动代码自动生效

SpringBoot入门-开发环境热部署

Springboot 热部署

SpringBoot ------ 应用热部署

springboot热部署——Java热部署与热加载原理

SpringBoot热部署