第三章 Springboot 热部署

简介: 平常开发项目时,修改了Java代码或者配置文件之后,需要手动重启项目才能生效。所谓的热部署就是在修改了后端代码之后不需要手动重启,工具会帮你快速的自动重启使修改生效。

1 原理

平常开发项目时,修改了Java代码或者配置文件之后,需要手动重启项目才能生效。所谓的热部署就是在修改了后端代码之后不需要手动重启,工具会帮你快速的自动重启使修改生效。

pring-boot-devtools模块能够实现热部署。深层原理是使用了两个ClassLoader一个Classloader加载那些不会改变的类(第三方Jar包)另一个ClassLoader加载会更改的类,称为restart ClassLoader。这样在有代码更改的时候,原来的restart ClassLoader被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间。

devtools会监听classpath下的文件变动,并且会立即重启应用(发生在保存时机),因其采用的虚拟机机制,所以重启是很快的。

2 演示环境

  • IDEA 2019
  • Spring Boot Maven项目

3 操作步骤

3.1 在pom.xml文件中添加依赖

<!--引入热部署插件-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <!-- 设置只在运行时起作用 ,打包时不打进去,默认为runtime -->
    <scope>runtime</scope>
    <!-- 设置不能被其它模块继承,如果多个子模块可以去掉 ,不必须 -->
    <optional>true</optional>
</dependency>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <fork>true</fork> <!-- 如果要加此项,必须设置为true 非必须-->
                <!-- 支持静态文件热部署 非必须 -->
                <addResources>true</addResources>
            </configuration>
        </plugin>
    </plugins>
</build>

完整pm.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.3.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.nobody</groupId>
    <artifactId>springboot-devtools</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-devtools</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--引入热部署插件-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <!-- 设置只在运行时起作用 ,打包时不打进去,默认为runtime -->
            <scope>runtime</scope>
            <!-- 设置不能被其它模块继承(即表示依赖不会传递),如果多个子模块可以去掉 ,非必须 -->
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <fork>true</fork> <!-- 如果要加此项,必须设置为true 非必须-->
                    <!-- 支持静态文件热部署 非必须 -->
                    <addResources>true</addResources>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

3.2 IDEA设置

在这里插入图片描述

使用ctrl+shift+a 快捷键搜索Registry,选择搜索出来的第一个,找到compiler.automake.allow.when.app.running,勾上开启此功能。
在这里插入图片描述

4 配置文件说明

如果我们想对热部署进行一些设置,可以在application.properties文件(或者application.yml)添加一些属性变量来修改。

server.port=8081

#主要配置
#是否启用自动重启功能
spring.devtools.restart.enabled=true
#重启服务的文件夹目录
spring.devtools.restart.additional-paths=src/main/java
#不重启服务的文件夹配置
spring.devtools.restart.exclude=META-INF/maven/**,META-INF/resouces/**,resources/**, static/**,public/**,templates/**,**/*Test.class,**/*Tests.class,git.properties

#非主要配置
#是否启用一个livereload.com兼容的服务器
#spring.devtools.livereload.enabled=true
#端口livereload.com服务器端口
#spring.devtools.livereload.port=35729
#在原理来的基础上新增不重启服务的文件夹目录
#spring.devtools.restart.additional-exclude=
#设置对路径变化进行监测的时间间隔(以毫秒为单位)
#spring.devtools.restart.poll-interval=1000
#在没有改变任何classpath的情况下,在重启被触发前的静默时长(以毫秒为单位)
#spring.devtools.restart.quiet-period=400
#设置触发条件,当需要实际触发重启检查时,则需要修改这个文件
#spring.devtools.restart.trigger-file=

5 项目下载地址

https://github.com/LucioChn/project02

相关文章
|
JSON Java 数据格式
SpringBoot热部署详解
SpringBoot热部署详解
SpringBoot热部署详解
|
Web App开发 前端开发 JavaScript
SpringBoot开发模式自动重启热部署spring-boot-devtools
SpringBoot开发模式自动重启热部署spring-boot-devtools
193 0
SpringBoot开发模式自动重启热部署spring-boot-devtools
|
Java
【Java】【SpringBoot】CP03:热部署
【Java】【SpringBoot】CP03:热部署
153 0
【Java】【SpringBoot】CP03:热部署
|
监控 IDE Java
《SpringBoot篇》06.超详细热部署教学
《SpringBoot篇》06.超详细热部署教学
258 0
《SpringBoot篇》06.超详细热部署教学
|
搜索推荐 Java Maven
idea springboot 热部署,让项目不再重启
idea springboot 热部署,让项目不再重启
556 0
idea springboot 热部署,让项目不再重启
|
Java
第八篇:SpringBoot热部署 如何打开热部署 如何控制热部署的范围 如何关闭热部署
第八篇:SpringBoot热部署 如何打开热部署 如何控制热部署的范围 如何关闭热部署
278 0
第八篇:SpringBoot热部署 如何打开热部署 如何控制热部署的范围 如何关闭热部署
|
Java 应用服务中间件 开发者
SpringBoot实现热部署笔记
SpringBoot实现热部署笔记
SpringBoot实现热部署笔记
|
Web App开发 监控 前端开发
SpringBoot2.x系列教程05--SpringBoot花样配置之实现热部署配置及原理
前言 上一章节中,壹哥 带各位学会了配置自定义的Web端口与项目根目录,今天我们再来看看其他的一些小花样。 在开发阶段,我们编写完代码后,就得需要点击启动按钮,重启项目后才能看到更新后的内容,每次都这么操作,就会就得有点麻烦,那能不能让项目随着代码的更新而自动重启呢? 既然有了这样的需求,SpringBoot就很暖心的给我们提供了这样的功能。今天我们就来看看SpringBoot中的另一个小花样配置---实现SpringBoot项目的热加载。 注意 网上也有不少教程把该功能称为热部署,我觉得叫做热加载更准确点! 一. SpringBoot热加载简介 在SpringBoot中实现热加载相对来说
345 0
Java:Springboot 实现热部署的两种方式
Java:Springboot 实现热部署的两种方式
117 0
Java:Springboot 实现热部署的两种方式
SpringBoot设置热部署(超详细)【IDEA版】
SpringBoot设置热部署(超详细)【IDEA版】
SpringBoot设置热部署(超详细)【IDEA版】