• 【SpringBoot】一文了解SpringBoot热部署


    🌕博客x主页:己不由心王道长🌕!
    🌎文章说明:一文彻底搞懂·SpringBoot热部署🌎
    ✅系列专栏:SpringBoot
    🌴本篇内容:对SpringBoot的热部署需求做一个总结🌴
    ☕️每日一语:人有退路,就有些许安全感。等到哪一天,你真没了退路,你就发现眼前哪条路都能走,也能通。☕️
    🚩 交流社区:己不由心王道长(优质编程社区)

    前言

    我们在了解一个东西的时候,总是喜欢问的就是为什么要?就是为什么我们需要这个,至少你要告诉我用这个的好处是什么;知道了需求然后学习,效率会好一些。
    所以,我们为什么要学习热部署?想象一下这个情况,我们在开发的过程中,每次修改都要重启服务器才能够去重新部署项目,在项目较小的情况下还能忍受,但是如果做的是一个大型项目,部署一次消耗的时间成本很高。
    所以热部署的作用
    就是为我们免去这些时间上的损耗。热部署是更改代码或者配置直接生效,不用重新启动运行,这就是热部署。

    手动启动热部署

    热部署种类

    实现热部署的方式有3种:
    1.使用springloaded配置pom.xml文件,使用mvn spring-boot:run启动
    2.使用springloaded本地加载启动,配置jvm参数

    3.使用devtools工具包,即开发者工具,归spring管理,操作简单,但是每次需要重新部署。
    但是我们这里只介绍第三种,开始吧

    手动进行热部署
    • 热部署既然是对项目的部署,首先我们至少有个简单点的项目
    • 老生常谈的创建项目我就直接上代码了。

    首先导入开发者工具:

    <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <optional>true</optional>
            </dependency>>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    上面导入了开发者工具的坐标,可以看出这是一个归spring管理的工具,true表示两个项目之间依赖不传递,这个没必要深究。

    开启热部署: 快捷键ctrl+F9
    或者:
    在这里插入图片描述
    关于热部署的小知识:

    • 重启(Restart):自定义开发代码,包含类、页面、配置文件等,加载位置restart类加载器
    • 重载(Reload):jar包,加载位置为base类加载器
      我们启用热部署的时候,其实用的就是重启,因为我们依赖的哪些jar包,基本上是不会发生改变的,如果热部署的方案是重载,那就消耗了很多时间去重新加载这些不会改变的jar,没必要。

    这里当我们每次对代码进行修改以后,都需要手动的去build,有没有不用自己手动的呢?有,自动启动热部署来了。

    自动启动热部署

    我们知道每次修改都手动一下build,有点麻烦,所以有了自动启动热部署。

    第一步:settings——>build——>compiler
    在这里插入图片描述
    把红框里的东西打上勾。

    第二步:我们需要找一个叫compiler.automake.allow.whenapp.running的key

    快捷键:CTRL+alt+shift+/(这个有时候是有问号的才生效)
    在这里插入图片描述
    在这里插入图片描述
    找了一圈没找到,什么情况呢?

    原来是因为idea的版本不同,在低版本idea工具中适用以上方法,我使用的idea版本是2021版,需要另一种打开方式:
    快捷键:ctrl+alt+s打开settings——>tools——>advanced settings(高级设置)——>勾选下图这个选项即可
    在这里插入图片描述
    自动启动热部署的激活方式:IDEA失去焦点后五秒钟启动热部署。

    热部署范围配置

    默认不触发重启的目录列表

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

    什么意思呢?就是你更改这几个目录里的东西并不会触发热部署
    除了默认的以外,我们还可以手动的配置不触发热部署的文件、目录、或者包

    spring:
      devtools:
        restart:
          exclude: com/example/controller/*,com/example/entity/*
    
    • 1
    • 2
    • 3
    • 4

    可以看到restart(重启)下面有exclude,翻译为中文就是除了什么之外,在后面可以配置不触发热部署的相关信息,可以配置多个,以逗号隔开。

    热部署的关闭

    我们可以开启热部署,当然也可以关闭热部署,一个热部署好关闭,但是如果在多个配置文件都设置了热部署,会不会起冲突,一个一个手动关闭,也确实浪费时间。

    有没有什么办法可以禁用热部署的方法呢?有的,我们首先要了解一下属性加载的优先级:
    在这里插入图片描述

    其他看不到没事,我们看到第三个,Config data(such as application.properties),这不就是SpringBoot配置文件嘛。就是说我们的配置文件加载优先级处于第三,那就好办了,如果我们要禁用热部署,那么我们只需要在属性加载优先级高的地方先给它干掉,那属性低的加载到的时候,看到我们已经不同意它进行热部署了,它不就禁用了吗?
    我们再找找,一看发现第6个,Java System properties(System.getProperties)不就是老熟人吗?不熟?

    System.out.println("鸡你太美");
    
    • 1

    在javaSe阶段我们就学习过,它也是一个类。不过在这里它可以用来设置配置属性
    好了,都了解了,接下来就是设置了

    public static void main(String[] args) {   
     System.setProperty("spring.devtools.restart.enabled", "false");
        SpringApplication.run(SpringBootHotdeploymentApplication.class args);
        }
    
    • 1
    • 2
    • 3
    • 4

    分析,上面这个表示设置一个配置把restart.enabled设为false,而且是在SpringApplication.run之前设置,这样在整个应用没有去加载配置文件是就把更高级的配置设置好了。

    总结

    本文章是在仓促之下记的相关笔记和个人理解,有不对的地方希望大佬们在评论区中指点,鄙人再加以改正,万分感谢。

  • 相关阅读:
    【MybatisPlus】MP解决四种表与实体的映射问题,以及id自增策略
    Linux的root用户
    HTML5 跨屏前端框架 Amaze UI
    Vue3——网站整体布局、用户动态页面(下)
    第四章 面向对象方法
    Ubuntu 安装 Android Studio
    通过阿里云宕机这件事,来看国内程序员的畸形职场文化
    SEO业务适合什么代理IP?2023海外代理IP推荐排名
    每个数据工程师都应该了解和使用的10 个 ChatGPT 提示
    一个开源轻量级的C#代码格式化工具(支持VS和VS Code)
  • 原文地址:https://blog.csdn.net/qq_63992577/article/details/127622107