• 【开发篇】一、热部署


    1、手工启动热部署

    日常开发与调试,改几行代码想看效果就得手动点重启,很繁琐,接下来考虑启动热部署。首先引入springboot开发者工具:

    <dependency>    
    	<groupId>org.springframework.bootgroupId>
        <artifactId>spring-boot-devtoolsartifactId>
        <optional>trueoptional>
    dependency>
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    此时若代码有变更,按Ctrl+F9构建项目操作即可实现热部署(手动)

    在这里插入图片描述

    关于热部署,有两个词条:

    • 重启(Restart):波及范围包括自定义开发代码,包含类、页面、配置文件等,加载位置是restart类加载器
    • 重载(ReLoad):波及范围包括各种依赖的jar包,加载位置是base类加载器

    改完代码,依赖的jar包通常不变,这个是没必要每次重复加载的。所以,热部署做的是Restart,不会重新加载依赖的jar资源。(第一次启动是Reload+Restart,热部署则只管Restart)

    2、自动启动热部署

    上面每次点构建,和点重启其实差不多,无非是比重启启动的快(不再加载依赖的jar的原因)。

    在这里插入图片描述

    接下来解决这个问题,开启自动热部署。首先打开Setting里的Build project automatically设置:

    在这里插入图片描述

    再Ctrl+Alt+/打开Registry:

    在这里插入图片描述

    快捷键调不出来的就加一下快捷键:

    在这里插入图片描述
    此时,当IDEA工具失焦(如从IDEA切到浏览器)5秒后自动启动热部署。(坑比较多,没生效的话,可能有以下原因:)

    • 没有以debug方式启动,而是直接run
    • 打开了好多IDEA窗口

    3、热部署范围配置

    对于html页面等这类文件,改完后刷新浏览器就生效,不用参与热部署,即要控制热部署的范围才更合理。默认不触发重启的文件或目录有:

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

    除了默认列表,可自定义不参与热部署重启的排除项:

    devtools:  
      restart:   
        # 文件夹就后面加/**,即所有文件 
        exclude: public/**,static/**,config/application.yml
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    在这里插入图片描述

    上面这个热部署仅在本地开发阶段有意义,等线上了,不可能出现服务正运行呢,代码变了的情况。(那时候可能会发生配置更新,又追求更新配置不用重启服务就生效,即热更新,后话了)

    4、关闭热部署功能

    方式很多,最直接的就是在配置文件改:

    devtools:  
      restart:   
        exclude: public/**,static/**,config/application.yml
        enable: false
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    但回顾之前配置文件的优先级,这里级别低:

    在这里插入图片描述

    容易被覆盖而不生效,因此换个优先级高的实现:

    public static void main(String[] args) {
    	//注意这里key的写法,参考properties文件
        System.setProperty("spring.devtools.restart.enabled", "false");
        SpringApplication.run(SSMPApplication.class);
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
  • 相关阅读:
    pytorch:debug dataLoader for循环的时候,很卡顿,进不去transform里面断点
    Java开发学习(十八)----AOP通知获取数据(参数、返回值、异常)
    嵌入式开发学习之--点亮LED灯(下)
    Oracle SQL执行计划操作(6)——并行相关操作
    绘图 | MATLAB
    卷积神经网络图片放大,神经网络输入图片大小
    软考初级网络管理员__网络单选题
    【Python】OpenCV4图像、视频读写操作
    计算机毕业设计SSM钓鱼爱好者交流平台【附源码数据库】
    Java 将Map里面的 ‘空’值 移除
  • 原文地址:https://blog.csdn.net/llg___/article/details/133094929