【经典】IDEA+DevTools热部署

2023-11-19

IDEA+DevTools实现热部署功能

热部署

  大家都知道在项目开发过程中,常常会改动页面数据或者修改数据结构,为了显示改动效果,往往需要重启应用查看改变效果,其实就是重新编译生成了新的Class文件,这个文件里记录着和代码等对应的各种信息,然后Class文件将被虚拟机的ClassLoader加载。

而热部署正是利用了这个特点,它监听到如果有Class文件改动了,就会创建一个新的ClaassLoader进行加载该文件,经过一系列的过程,最终将结果呈现在我们眼前。

 

类加载机制

  Java中的类经过编译器可以把代码编译为存储字节码的Class文件,该Class文件存储了各种信息,最终要加载到虚拟机中运行使用。

  类加载机制(摘自《深入理解 Java 虚拟机》)

  虚拟机把描述类的数据从Class文件加载到内存中,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。

 

spring-boot-devtools 自动重启(热部署)

  在激活了开发者工具后,ClassPath里对文件做任何修改都会触发应用程序重启。为了让重启的速度够快,不会修改的类(第三方JAR包)都加载到了基础类加载器里,而应用程序的代码则会加载到一个单独的重启类加载器里。检测到变更时,只会重启类加载 器重启。

  有些ClassPath里的资源变更后不需要重启应用程序。像Thymeleaf这样的视图模板可以直接编辑,不用重启。在/static 或 /public里的静态资源也不用重启应用程序,所以Spring Boot开发者工具在重启时排除掉了如下目录:/META-INF/resources、/resources、/static、/public、/templates。

 

一、POM集成

下面这一步,我自己测试发现是不需要设置的。但是有网友说需要设置才生效,这个看个人情况,酌情设置。

configuration.fork : Flag to indicate if the run processes should be forked. {@code fork} is

automatically enabled if an agent, jvmArguments or working directory are specified,

or if devtools is present

 

二、IDEA工具启动自动编译功能

三、IDEA 设置为在程序运行过程中,依然允许自动编译

操作: ctrl + shift + alt + /,选择Registry,勾选勾上 Compiler autoMake allow when app running

 

执行完上述的操作步骤后,我们的devtools热部署集成就完成了。

 

补充说明:https://blog.csdn.net/songhaifengshuaige/article/details/54137275

  • 默认情况下,/META-INF/maven,/META-INF/resources,/resources,/static,/templates,/public这些文件夹下的文件修改不会使应用重启,但是会重新加载(devtools内嵌了一个LiveReload server,当资源发生改变时,浏览器刷新)。
  • 如果想改变默认的设置,可以自己设置不重启的目录:spring.devtools.restart.exclude=static/**,public/**,这样的话,就只有这两个目录下的文件修改不会导致restart操作了。
  • 如果要在保留默认设置的基础上还要添加其他的排除目录:spring.devtools.restart.additional-exclude
  • 如果想要使得当非classpath下的文件发生变化时应用得以重启,使用:spring.devtools.restart.additional-paths,这样devtools就会将该目录列入了监听范围
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【经典】IDEA+DevTools热部署 的相关文章

随机推荐

  • LeetCode第79题:单词搜索

    给定一个 m x n 二维字符网格 board 和一个字符串单词 word 如果 word 存在于网格中 返回 true 否则 返回 false 单词必须按照字母顺序 通过相邻的单元格内的字母构成 其中 相邻 单元格是那些水平相邻或垂直相邻
  • 中国人民大学计算机系孙辉,张静(中国人民大学信息学院计算机系讲师)_百度百科...

    张静 中国人民大学信息学院计算机系讲师 语音 编辑 锁定 讨论 上传视频 本词条缺少概述图 补充相关内容使词条更完整 还能快速升级 赶紧来编辑吧 张静 现任中国人民大学信息学院计算机系讲师 1 中文名 张静 毕业院校 比利时鲁汶大学学位 学
  • 最详细的Java知识点--Map集合

    Map 主要内容 Map集合 目标 能够说出Map集合特点 使用Map集合添加方法保存数据 使用 键找值 的方式遍历Map集合 使用 键值对 的方式遍历Map集合 能够使用HashMap存储自定义键值对的数据 能够使用HashMap编写斗地
  • java错误和异常

    错误 error 非常严重 不处理无法编译 不过很容易处理 一般也就是变量名错误 函数写错了这些 还有就是内存 环境问题了 异常 Exception 编译时异常 必须使用try catch才能运行 比如IOException SQLExce
  • Java--- Java 中的线程,一般执行完成后就会自动销毁

    关于 Java 中的线程 一般执行完成后就会自动销毁 程序会终止 如下测试代码 public class Test implements Runnable public static void main final String args
  • Unity 2D 碰撞检测位置,生成烟雾实例化

    ContactPoint2D contact p collision contacts 0 Quaternion rot Quaternion FromToRotation Vector3 up contact normal Vector3
  • ubuntu安装最新版docker简易教程

    Ubuntu Docker 安装 Docker Engine Community 支持以下的 Ubuntu 版本 Xenial 16 04 LTS Bionic 18 04 LTS Cosmic 18 10 Disco 19 04 其他更新
  • pyecharts源码解读(17)HTML组件包components之表格组件Table

    当前pyecharts的版本为1 9 0 components包概述 components包位于pyecharts包顶级目录中 用于定义pyecharts的HTML组件 包结构如下 components HTML组件包 image py 定
  • python注意事项2

    工具pycharm 1 字符串的方法 hello str hello world 以什么开始 hello str startwith h 以什么结束 hello str endwith 去除空白字符 string lstrip 去除左边的空
  • 【Docker网络】Docker的容器互联

    Docker网络 Docker的容器互联 一 Docker容器互联介绍 1 1 Docker容器互联简介 1 2 Docker容器互联方式 二 本次实践介绍 2 1 本地环境规划 2 2 本次实践介绍 三 默认网络下的容器互联 3 1 默认
  • ABB PFEA111-20 3BSE050090R20处理器模块

    处理能力 PFEA111 20 处理器模块可能具备高性能的处理能力 能够执行复杂的控制算法 逻辑运算和数据处理任务 多通道输入输出 该模块可能会提供多个数字或模拟输入通道 用于监测外部信号 以及多个输出通道 用于控制执行器和设备 通信接口
  • 测试自动化面试题

    Python python有哪些数据类型 Python支持多种数据类型 包括以下常见的数据类型 数字类型 整数 int 浮点数 float 和复数 complex 字符串类型 由字符组成的不可变序列 使用引号 单引号或双引号 括起来 列表
  • 机器学习(三)K-means聚类(手肘法、轮廓系数、可视化代码)

    K means聚类 聚类是无监督学习当中非常重要的一部分 能够在没有标签的情况下将数据分类 说到聚类 最常用也是最重要的一个算法就是K means算法 算法介绍 K means是一种非常简单快速高效的算法 只需要迭代几次即可 其原理用一句话
  • linux---"echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message

    2020年3月14日服务器异常重启 查看 var log message日志 如下 Mar 14 15 04 59 localhost kernel azx single send cmd 11 callbacks suppressed M
  • GLES3.0中文API-glGetProgramResource

    名称 glGetProgramResource 检索程序对象中单个活动资源的多个属性的值 C 规范 void glGetProgramResourceiv GLuint program GLenum programInterface GLu
  • flask模块mock接口(一)

    目录 一 安装第三方模块 二 flask模块的使用 三 动态路由 四 返回json格式数据 有时候测试需要调用第三方接口进行测试 但是第三方接口没有提供时 我们可以通过mock接口模拟第三方接口 一 安装第三方
  • UNITY3D 实现暂停(Coroutine)

    前断时间在做一个游戏项目 为了实现暂停还有游戏逻辑中用yield 自己写了一个类 代码如下 using UnityEngine using System Collections if want gameobject pause Updata
  • 嵌入式基础常识

    一 基本概念 linux ubuntu 用户名 类型 普通用户 系统名称 家目录 root 管理员用户 pwd 显示当前工作路径 绝对路径 home linux 家目录 根目录下 代表根目录 ls 列出文件状态 选项 l i h 1 rwx
  • BUUCTF-千层套路(python脚本)

    zip层层压缩 写脚本爆破 import zipfile import os current path r C Users SoberJoker Downloads attachment if name main pwd ls os lis
  • 【经典】IDEA+DevTools热部署

    IDEA DevTools实现热部署功能 热部署 大家都知道在项目开发过程中 常常会改动页面数据或者修改数据结构 为了显示改动效果 往往需要重启应用查看改变效果 其实就是重新编译生成了新的Class文件 这个文件里记录着和代码等对应的各种信