30、devtools 依赖关于自动重启(自动加载页面)的知识
devtools 依赖关于自动重启的知识
★ 自动重启
devtools会监控类加载路径中的文件(尤其是*.class文件),只要这些文件发生了改变,
devtools就会自动重启Spring Boot应用。▲ 不同工具触发自动重启的方式:Eclipse(默认开启了自动构建),只要保存修改后的文件就会触发自动重启。IDEA(默认关闭了自动构建),保存文件后,必须运行“Build → Build Project”(或Ctrl + F9)才会触发自动重启。
当然也可选择为IDEA开启自动构建。若使用Maven构建,保存文件后运行“mvn compile”命令触发自动重启;若使用Gradle构建,保存文件后运行“gradle build”命令触发自动重启。——总之一条:你仅仅修改、保存了Java源代码,devtools是不会触发自动重启的。只有当你的类加载路径下的文件发生了改变时,devtools才会触发自动重启。【总结】:如果你修改并保存了Java代码,如果你想立即看到修改后的结果- 对于Eclipse,Eclipse会自动重启项目,因此可立即看到修改结果。- 对于IDEA,必须按下Ctrl+F9来重新构建项目,这样才会触发自动重启。然后可立即看到修改结果。
★ 自动重启的实现方式:
devtools依赖于Spring容器的关闭钩子(shutdown hook)来关闭应用、实现自动重启。devtools的自动重启是通过“双类加载器”来实现的:- 其中base类加载器负责加载那些无需改变的类(如从第三方JAR包加载的类)。- restart类加载器负责加载那些需要变化的类(项目中开发的类)。自动重启时,base类加载器保持不变、继续复用;restart类加载器则要重新创建、并加载所有可能改变的类,原有的restart类加载器被直接抛弃。【说明】:自动重启(热启动)时,保证了开发过程中的所有类都能得到更新;但第三框架的类依然依然保留原有的,无需重新加载 。自动重启比直接冷启动的速度要快。▲ 自动重启的替换选项:实时reload技术,比如JRebel——它可以在reload时重写发生了修改的类。JRebel是个商业软件。
★ 自动重启的触发目录
默认情况下,/META-INF/maven、/META-INF/resources、/resources、/static、/public、/templates路径下文件的改变,不会触发自动重启,只会触发静态资源的重加载和浏览器的实时重加载(LiveReload)。通过如下属性设置不触发自动重启的目录(该属性的默认值就是上面列出的目录):spring.devtools.restart.exclude=static/**,public/**
通过如下属性添加不触发自动重启的目录:spring.devtools.restart.additional-exclude=fkjava/**
★ 自动重启的轮训设置:
devtools通过轮询指定路径下文件的改变来触发自动重启,与轮询机制有关的两个配置选项是:- spring.devtools.restart.poll-interval:指定每隔多少秒轮询一次。- spring.devtools.restart.quiet-period:指定保持多少秒的静默期。Spring Boot还可指定触发文件,这样轮询机制只需监控触发文件(不再监控.class文件)的改变来触发自动重启,
例如下面指定只有当reloadtrigger文件被修改时才触发自动重启:
spring.devtools.restart.trigger-file=.reloadtrigger
★ 禁用自动重启
两种方式:方式一:将spring.devtools.restart.enabled设为false来禁用自动重启,在application.properties文件中设置即可,这种设置方式依然会初始化自动重启的类加载器,只是不再监控文件的改变。 方式二:彻底禁用自动重启功能,在调用SpringApplication的run()方法之前将spring.devtools.restart.enabled系统属性设为false。
★ 自动重启时更新JAR包中class文件
有时项目所依赖的JAR包本身也处在开发、调试过程中,此时希望应用重启时也能更新该JAR包中的类文件,
这就需要强制指定用restart类加载器来加载特定JAR包(不是第三方框架的JAR包,而是项目开发的JAR包)中的类文件。通过META-INF/spring-devtools.properties文件可设置类加载器行为:restart.include.*:该属性显式指定用restart类加载器加载哪些JAR包,该属性值就是要用restart加载器所加载的JAR包。
restart.exclude.*:该属性显式指定用base类加载器加载哪些JAR包。通常无需指定该属性,因为devtools默认就是使用base类加载器来加载JAR包。
例如如下配置代码:restart.exclude.fkjavacommonlibs=/fkjava-common-[\\w\\d-\\.]+\\.jarrestart.include.utillibs=/fkjava-util-[\\w\\d-\\.]+\\.jar上面配置中key必须是唯一的,例如上面的key,它们只要以restart.exclude.*或restart.include.*开头就有效。
★ 实时重加载
devtools工具内嵌了一个实时重加载(LiveReload)服务器,它可在资源改变时触发浏览器(浏览器需要安装LiveReload插件)刷新。——本质依然是要浏览器去刷新,只不过不需要由开发者手动刷新。【备注】 浏览器的LiveReload需要插件支持。如果想关闭devtools的LiveReload服务器,可在application.properties文件中添加如下属性:spring.devtools.livereload.enabled=false【注意】如果要让实时livereload生效,必须开启应用的自动重启功能。
都是需要按ctrl+9编译
★ devtools(开发者工具)的全局配置文件
home目录windows: C:\user\<用户名>Linux: /home/<用户名>${home}/.config/spring-boot/spring-boot-devtools.三个后缀
${home}/.spring-boot-devtools.properties所有和devtools有关的配置都可在全局配置文件中设置。
★ devtools的全局配置文件与Profile是无关的。
通过spring-boot-devtools.properties(或yaml、yml)文件设置活动Profile不会有任何效果。
——不能设置活动Profilespring-boot-devtools-<profile>.properties(或yaml、yml)形式的配置文件将会被忽略、不会有任何作用。
——尝试针对特定Profile设置全局配置文件是无效的。通过spring-boot-devtools.properties(或yaml、yml)文件指定spring.config.activate.on-profile属性没有任何意义。
——尝试在全局配置文件中设置多Profile的配置也是无效的。
相关文章:
30、devtools 依赖关于自动重启(自动加载页面)的知识
devtools 依赖关于自动重启的知识 ★ 自动重启 devtools会监控类加载路径中的文件(尤其是*.class文件),只要这些文件发生了改变, devtools就会自动重启Spring Boot应用。▲ 不同工具触发自动重启的方式:Eclipse&…...
ES6 Promise/Async/Await使用
Promise应用 在工作中, 我们经常会遇到用异步请求数据, 查询一个结果, 然后把返回的参数放入到下一个执行的异步函数像这样: $.ajax({..., success(resp)>{$.ajax({..., resp.id, success(resp)>{$.ajax({..., resp.name success(resp)>{//多层嵌套的情况, 看着是不…...
Word中对象方法(Methods)的理解及示例(上)
【分享成果,随喜正能量】奋斗没有终点,任何时候都是一个起点,沉潜是为了蓄势待发,沉潜是为了等待因缘。鲸豚沉潜于大海,幽兰深藏于山谷,能够经得起沉潜的人,才会有更高的成就。正如一年的树木只能当柴烧&am…...
AutoDev 1.1.3 登场,个性化 AI 辅助:私有化大模型、自主设计 prompt、定义独特规则...
在过去的半个月里,我们为开源辅助编程工具 AutoDev 添加了更强大的自定义能力,现在你可以: 使用自己部署的开源大模型自己配置 Intellij IDEA 中的行为自定义开发过程中的规范 当然了,如果您自身拥有开发能力的话,建议…...
win11 python 调用edge调试过程
1、下载对应版本的驱动程序: https://developer.microsoft.com/zh-cn/microsoft-edge/tools/webdriver/ 2、和系统版本对应的exe文件(x86、x64要对应)放置的固定的目录,我放到了system32下了; 3、PATH路径添加windows/system32目录&#x…...
DS-排序回顾
快速排序相比于堆排序的优点有: 效率更高:快速排序的平均时间复杂度为 O(nlogn),而堆排序的时间复杂度为 O(nlogn)。虽然它们的时间复杂度相同,但是在实际情况下,快速排序往往比堆排序更快,因为快速排序具有…...
clion软件ide的安装和环境配置@ubuntu
1.官网: Download CLion 2.安装Clion 直接在官网下载并安装即可,过程很简单 https://www.jetbrains.com/clion/ https://www.jetbrains.com/clion/download/#sectionlinux 3.激活码 4.配置Clion 安装gcc、g、make Ubuntu中用到的编译工具是gcc©…...
Cpp学习——类与对象3
目录 一,初始化列表 1.初始化列表的使用 2.初始化列表的特点 3.必须要使用初始化列表的场景 二,单参数构造函数的隐式类型转换 1.内置类型的隐式类型转换 2. 自定义类型的隐式类型转换 3.多参数构造函数的隐式类型转换 4.当你不想要发生隐式类型转换…...
回归预测 | MATLAB实现PSO-RBF粒子群优化算法优化径向基函数神经网络多输入单输出回归预测(多指标,多图)
回归预测 | MATLAB实现PSO-RBF粒子群优化算法优化径向基函数神经网络多输入单输出回归预测(多指标,多图) 目录 回归预测 | MATLAB实现PSO-RBF粒子群优化算法优化径向基函数神经网络多输入单输出回归预测(多指标,多图&a…...
ahooks.js:一款强大的React Hooks库及其API使用教程(四)
一、ahooks.js简介二、ahooks.js安装三、继续ahooks.js API的介绍与使用教程51. useResetState52. useUpdateLayoutEffect53. useDeepCompareLayoutEffect54. useRafInterval55. useRafTimeout56. useTimeout57. useLockFn58. useDocumentVisibility59. useDrop60. useDrag 一、…...
FOSSASIA Summit 2023 - 开源亚洲行
作者 Ted 致歉:本来这篇博客早就该发出,但是由于前几个月频繁差旅导致精神不佳,再加上后续我又参加了 Linux 基金会 7/27 在瑞士日内瓦举办的 Open Source Congress,以及 7/29-30 台北的 COSCUP23,干脆三篇连发&#x…...
QT 基本对话框
包括: 1.标准文件对话框 dialog.h #ifndef DIALOG_H #define DIALOG_H#include <QDialog> #include <QTextCodec> #include <QLabel> #include <QLineEdit> #include <QPushButton> #include <QGridLayout> #include <QFr…...
8th参考文献:[8]许少辉.乡村振兴战略下传统村落文化旅游设计[M]北京:中国建筑出版传媒,2022.
8th参考文献:[8]许少辉.乡村振兴战略下传统村落文化旅游设计[M]北京:中国建筑出版传媒,2022&…...
Azure静态网站托管
什么是静态网站托管 Azure Blob的静态网站托管是一项功能,它允许开发人员在Azure Blob存储中托管和发布静态网站。通过这个功能,您可以轻松地将静态网页、图像、视频和其他网站资源存储在Azure Blob中,并直接通过提供的URL访问这些资源。 官…...
LeetCode 热题 100(五):54. 螺旋矩阵、234. 回文链表、21. 合并两个有序链表
题目一: 54. 螺旋矩阵https://leetcode.cn/problems/spiral-matrix/ 题目要求: 思路:一定要先找好边界。如下图 ,上边界是1234,右边界是8、12,下边界是9、10、11,左边界是5,所以可…...
常用消息中间件介绍
RocketMQ 阿里开源,阿里参照kafka设计的,Java实现 能够保证严格的消息顺序 提供针对消息的过滤功能 提供丰富的消息拉取模式 高效的订阅者水平扩展能力 实时的消息订阅机制 亿级消息堆积能力 RabbitMQ Erlang实现,非常重量级,更适…...
装饰器读取不到被装饰函数的参数-已解决
def write_case_log(func):def wrapper(*args, **kwargs):logger.info("{}开始执行".format(func.__name__))func(*args,**kwargs)logger.info("{}执行中".format(args))logger.info("{}执行结束",format(func.__name__))return wrapper被装饰函…...
python爬虫爬取中关村在线电脑以及参数数据
一. 内容简介 python爬虫爬取中关村在线电脑以及参数数据 二. 软件环境 2.1vsCode 2.2Anaconda version: conda 22.9.0 三.主要流程 3.1 代码 解析都在代码里面 # 接口分析 # 原始接口,后面几个数字就是占位的,每个位置代表着不同的标签 # http…...
chatGPT-对话爱因斯坦
引言 阿尔伯特爱因斯坦( 1879年 3 月 14 日 – 1955 年 4 月 18 日)是一位出生于德国的理论物理学家,被广泛认为成为有史以来最伟大、最有影响力的科学家之一。他以发展相对论而闻名,他还对量子力学做出了重要贡献,因…...
嵌入式软件开发中的数据类型转换
在嵌入式软件开发时,数据的显示必不可少,那么必定会涉及到数据类型转换。将不同类型的数据在编程中进行转换,以便满足不同的需求。 插入一个知识点: 在C语言中,字符串是由字符组成的字符数组,以null终止符…...
大语言模型如何处理长文本?常用文本分割技术详解
为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...
第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明
AI 领域的快速发展正在催生一个新时代,智能代理(agents)不再是孤立的个体,而是能够像一个数字团队一样协作。然而,当前 AI 生态系统的碎片化阻碍了这一愿景的实现,导致了“AI 巴别塔问题”——不同代理之间…...
Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
MySQL 索引底层结构揭秘:B-Tree 与 B+Tree 的区别与应用
文章目录 一、背景知识:什么是 B-Tree 和 BTree? B-Tree(平衡多路查找树) BTree(B-Tree 的变种) 二、结构对比:一张图看懂 三、为什么 MySQL InnoDB 选择 BTree? 1. 范围查询更快 2…...
从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...
Chrome 浏览器前端与客户端双向通信实战
Chrome 前端(即页面 JS / Web UI)与客户端(C 后端)的交互机制,是 Chromium 架构中非常核心的一环。下面我将按常见场景,从通道、流程、技术栈几个角度做一套完整的分析,特别适合你这种在分析和改…...
【LeetCode】算法详解#6 ---除自身以外数组的乘积
1.题目介绍 给定一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O…...
