首页 > 编程学习 > SpringBoot热部署

SpringBoot热部署

发布时间:2022/11/12 20:34:31

目录

  • 一、手动启动热部署
  • 二、自动启动热部署
  • 三、热部署范围配置
  • 四、关闭热部署

热部署的理解
通俗点说就是你的程序更改了,需要重新启动服务器再才会生效,嫌麻烦?嫌耗时?不想重启,服务器会悄悄的把更新好的程序重新加载一次,这就是热部署。

一、手动启动热部署

  • 步骤①:导入对应的坐标
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-devtools</artifactId>
	<optional>true</optional>
</dependency>
  • 步骤②:当程序更改后,如图点击选项,重新构建项目,可以使用快捷键
    在这里插入图片描述
    对应的快捷键
<CTRL>+<F9>

以上过程就实现了SpringBoot工程的热部署,是不是挺简单的。不过这里需要把底层的工作工程给普及一下。

启动热部署

  • 关于热部署

    • 重启(Restart):自定义开发代码,包含类、页面、配置文件等,加载位置restart类加载器。
    • 重载(Reload):jar包,加载位置base类加载器。
  • 第一次启动应用:重启 + 重载
  • 启用热部署:重启

当SpringBoot项目启动时,base类加载器执行,加载jar包中的信息后,restart类加载器执行,加载开发者制作的内容。当执行构建项目后,由于jar中的信息不会变化,因此base类加载器无需再次执行,所以仅仅运行restart类加载即可,也就是将开发者自己制作的内容重新加载就行了,这就完成了一次热部署的过程,也可以说热部署的过程实际上是重新加载restart类加载器中的信息。


二、自动启动热部署

上述提到在修改完代码后需要点击相应选型或按快捷键,如果我们在修改完代码后,能自动地完成热部署,不用点击任何选项,这就是自动启动热部署。

  • 步骤①:设置自动构建项目

点击【File】,选择【settings…】,在面板左侧的菜单中找到【Compile】选项,然后勾选【Build project automatically】

在这里插入图片描述

  • 步骤②:允许在程序运行时进行自动构建

​ 使用快捷键【Ctrl】+【Alt】+【Shit】+【/】打开维护面板,选择第1项【Registry…】

在这里插入图片描述
在选项中勾选对应项

在这里插入图片描述

对于idea2021,在如下地方进行修改:

在这里插入图片描述

如果你每敲一个字母,服务器就重新构建一次,这未免有点太频繁了,所以idea设置当idea工具失去焦点5秒后进行热部署。其实就是你从idea工具中切换到其他工具时进行热部署,比如改完程序需要到浏览器上去调试,这个时候idea就自动进行热部署操作。


三、热部署范围配置

为了便于管理,在程序目录中除了有代码,还有可能有文档,如果修改了一下文档,这个时候会进行热部署吗?不管是否进行热部署,这个过程我们需要自己控制才比较合理,这个控制的过程就是热部署的范围配置。

通过修改项目中的文件,可以发现其实并不是所有的文件修改都会激活热部署的,原因在于在开发者工具中有一组配置,当满足了配置中的条件后,才会启动热部署,配置中默认不参与热部署的目录信息如下:

/META-INF/maven
/META-INF/resources
/resources
/static
/public
/templates

以上目录中的文件如果发生变化,是不参与热部署的。如果想修改配置,可以通过application.yml文件进行设定哪些文件不参与热部署操作。

spring:
  devtools:
    restart:
      # 设置不参与热部署的目录或文件
      exclude: static/**, public/**

四、关闭热部署

​ 热部署功能是一个典型的开发阶段使用的功能,到了线上环境运行程序时,这个功能就没有意义了。如何关闭热部署功能呢?

  • 通过配置文件关闭
spring:
  devtools:
    restart:
      # true 开启热部署, false 关闭热部署
      enabled: false

​ 如果当心配置文件层级过多导致相符覆盖最终引起配置失效,可以提高配置的层级,在更高层级中配置关闭热部署。例如在启动容器前通过系统属性设置关闭热部署功能。

  • 在启动容器前通过系统属性设置关闭
@SpringBootApplication
public class SpringBootTest1Application {
    public static void main(String[] args) {
        System.setProperty("spring.devtools.restart.enabled", "false");
        SpringApplication.run(SpringBootTest1Application.class, args);
    }
}
Copyright © 2010-2022 dgrt.cn 版权所有 |关于我们| 联系方式