(十七)Spring Boot devtools

article/2025/10/8 12:55:56

1、devtools简介

        Spring Boot 提供了一组开发工具 spring-boot-devtools 可以提高开发者的工作效率,开发者可以将该模块包含在任何项目中,spring-boot-devtools 最方便的地方莫过于热部署了。

2、devtools 实战

2.1 基本用法

要想在项目中加入 devtools 模块,只需添加相关依赖即可,代码如下:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><optional>true</optional>
</dependency>
注意:这里多了 一个 optional 选项,是为了防止将 devtools 依赖传递到其他模块中。当开发者将应用打包运行后,devtools 会被自动禁用

        当开发者将 spring-boot-devtools 引入项目后,只要 classpath 路径下发生变化,项目就会自动重启,这极大地提高了项目的开发速度。如果开发者使用 Eclipse ,那么在修改完代码并保存之后,项目将自动编译井触发重启,而开发者如果使用 IntelliJ IDEA 默认情况下,需要开发者手动编译才会触发重启。手动编译时,单击 Build -> Build Project 菜单或者按 Ctrl+F9 快捷键进行编译,编译成功后就会触发项目重启。当然,使用 IntelliJ IDEA 开发者也可以配置项目自动编译,配置步骤:

  • 单击 File -> settings 菜单,打开 settings 页面,在左边的菜单栏依次找到 Build,Execution,Deployment -> Compile,勾选 Build project automatically 如图所示。
    在这里插入图片描述
  • 按住Ctrl+Shift+Alt+/ 快捷捷键调出 Maintenance 页面
    在这里插入图片描述
  • 选择 Registry,在新打开的 Registry 页面中,勾选compiler.automake.allow.when.app.running 复选框。配置完成后,若开发者修改了代码则将会自动重启。
    在这里插入图片描述
注意:classpath 路径下的静态资源或者视图模板等发生变化时,并不会导致项目重启。

2.2 基本原理

        Spring Boot 使用的自动重启技术涉及两个类加载器, 一个是 baseclassloader ,用来加载不会变化的类,例如项目引用的第三方的 jar ;另一个是 restartclassloader ,用来加载开发者自己写的
会变化的类。当项目需要重启时, restartclassloader 将被一个新创建的类加载器代替,而 baseclassloader
则继续使用原来的,这种启动方式要比冷启动快很多,因为 baseclassloader 已经存在井且已经加载好。

2.3 自定义监控资源

        默认情况下,/META-INF/maven/MET A-INF/resources/resources/static/public 以及 /templates位置下资源的变化并不会触发重启,如果开发者想要对这些位置进行重定义 ,在 application.properties 中添加如下配置即可:

spring.devtools.restart.exclude=static/**

这表示从默认的不触发重启的目录中除去 static 目录,即 classpat:static 目录下的资源发生变化时也会导致项目 重启。用户也可以反向配置需要监控的目录,配置方式如下:

spring.devtools.restart.additional-exclude=src/main/resources/static
  • 这个配置表示当 src/main/resources/static 目录下的文件发生变化时,自动重启项目。
  • 由于项目的编码过程是一个连续的过程,并不是每修改一行代码就要重启项目,这样不仅浪费电脑性能,而且没有实际意义。鉴于这种情况,开发者也可以考虑使用触发文件,触发文件是个特殊的文件,当这个文件发生变化时项目就会重启,配置方式如下:
spring.devtools.restart.trigger-file=.trigger-file

在项目 resources 目录下新建一个名为.trigger-file 的文件,此时当开发者修改代码时,默认情况下项目不会重启,需要项目重启时,开发者只需要修改 .trigger-file 文件即可,但是注意,如果项目没有改变,只是单纯地改变了 .trigger-file 文件,那么项目不会重启。

2.4 使用 LiveReload

        因为静态资源目录下的文件变化以及模板文件的变化不会引发重启,虽然开发者可以通过修改配置改变这一默认情况,但实际上并没有必要,因为静态文件不是 class。devtools 默认嵌入了 LiveReoad 服务器,可以解决静态文件的热部署, LiveReload 可以在资源发生变化动触发浏览器更新,LiveReoad 支持 Chrome、Firefox、Safari,以Chrome 为例, 在 Chrome 应用商店搜索 LiveReload 并添加到扩展程序。
        在浏览器中打开项目的页面,然后单击浏览器右上角的 LiveReload 按钮,开启LiveReload 连接,此时当静态资源发生改变时,浏览器就会自动加载。如果开发者不想使用这一特性,可通过如下配置关闭:

spring.devtools.livereload.enabled=false
注意:建议开发者使 LiveReload 策略而不是项目重启策略来实现静态资源的动态加载,因为项目重启所耗费的时间一般要超过 LiveReload

2.5 禁用自动重启

如果开发者添加了 spring-boot-devtools 依赖但是不想使用自动重启特性,那么可以关闭自动重启。

spring.devtools.restart.enabled=false

也可以使用代码来控制:

@SpringBootApplication
public class DevToolsApplication {public static void main(String[] args) {System.setProperty("spring.devtools.restart.enabled", "false");SpringApplication.run(DevToolsApplication.class, args);}}

http://chatgpt.dhexx.cn/article/h3DxHErb.shtml

相关文章

libev事件驱动网络库从安装到使用

上次说到的select/poll模型&#xff08;传送门&#xff09;的特征在于每一个执行周期都会探测一次或一组事件&#xff0c;一个特定的事件会触发某个特定的响应。我们可以将这种模型归类为“事件驱动模型”。 相比其他模型&#xff0c;使用 select() 的事件驱动模型只用单线程&…

Libev documentation

2019独角兽企业重金招聘Python工程师标准>>> NAME libev - a high performance full-featured event loop written in C SYNOPSIS #include <ev.h> EXAMPLE PROGRAM // a single header file is required #include <ev.h>#include <stdio.h> // f…

libev库使用教程

libev是用C语言编写的高性能、全功能事件循环库&#xff0c;支持select&#xff0c;poll模型&#xff0c;也支持linux特定的epoll模型&#xff0c;一个小巧、易用的库。 环境准备&#xff1a;ubuntu 一、libev库支持的功能 官方文档&#xff1a;http://pod.tst.eu/http://cvs…

偷懒的网络框架libevent、libev框架介绍

libevent、libev框架介绍 前言概述libevent编译安装libeventlibevent的封装层次 IO事件检测的封装与api介绍事件管理器event_base构建事件管理器event_base_new释放事件管理器event_base_freeevent_reinitevent_get_supported_methodsevent_base_get_method事件循环event_base_…

libev实现分析

libev实现分析 libev是一个事件驱动库&#xff0c;底层是基于select、epoll、kqueue等I/O复用接口。所谓事件驱动库&#xff0c;就是用户定义一个事件以及改事件发生时调用的函数&#xff0c;该库会监听该事件&#xff0c;并在事件发生时调用相应的函数。 libev提供了很多事件…

libev源码解读

1、源码&#xff1a; 源码参见官网或者我的github上 2、安装使用&#xff1a; 安装与基本使用参见我的另一篇博客&#xff1a;传送门 3、架构 Libev通过一个 struct ev_loop结结构表示一个事件驱动的框架。在这个框架里面通过ev_xxx结构&#xff0c;ev_init、ev_xxx_set、…

libev库

libev库 概念数据结构watch集合watch结构 全局触发事件集合数据结构事件触发之IO事件定时器原理ev_run函数 概念 libev是一个轻量级的事件通知库&#xff0c;具备支持多种事件通知能力。 数据结构 在熟悉代码之前先了解其相关数据结构往往更加方便后续代码的阅读。 在libev中…

libev 源码解析

一 libev简介 libev是一个轻量级的事件通知库&#xff0c;具备支持多种事件通知能力&#xff0c;通过对libev的源码的阅读&#xff0c;可以清楚了解事件通知实现内部机制。 二 核心数据结构 在libev中关键的数据结构是&#xff0c;loop结构体&#xff0c;该结构体定义的字段较…

android libev 编译,移植libev事件库到Android中

因为libev库是使用C语言写的&#xff0c;所以在Android项目中使用此库的方法是把libev编译成.so文件&#xff0c;在Android中使用jni方式来调用libev的.so文件。 我们大家都知道android的ndk开发可以编译c,c代码&#xff0c;不过需要自己写Android.mk文件。但是对于大多数开源项…

libev

开始之前先看一下libevent libev libuv&#xff0c;参考附录1. 本着我自己的个性&#xff0c;我喜欢简单的东西&#xff0c;越简单越好&#xff0c;越傻越好&#xff0c;所以在此我考虑libev&#xff0c;只是tmd&#xff0c;libev的官网打不开&#xff0c;真是无语了。 上例子…

libev:详解

事件库之Libev&#xff08;一&#xff09; 使用Libev Libev的作者写了一份很好的官方Manual,比较的齐全&#xff0c;即介绍了Libev的设计思想&#xff0c;也介绍了基本使用还包括内部各类事件详细介绍。这里略微赘述一下。Libev通过一个 struct ev_loop 结结构表示一个事件驱动…

事件驱动库 libev 使用详解

C/CLinux服务器开发/后台架构师知识体系 libev 是一个通过 C 语言编写的&#xff0c;高性能的事件循环库&#xff0c;支持多种事件类型&#xff0c;与此类似的事件循环库还有 libevent、libubox 等&#xff0c;在此详细介绍下 libev 相关的内容。 简介 这是一个简单而且高性…

数据库和实例

这篇文章跟数据库开发有什么关系呢&#xff1f;我感觉呢只从字面上看确实没有什么关系&#xff0c;可是了解的话跟大牛讨论时他们最起码不会被鄙视、面试时可能也会有用。如果你再深入的钻研下去你就会发现里面的内容好“丰满”。作为一个菜鸟&#xff08;指本人&#xff09;以…

【达梦数据库实例创建】

达梦数据库实例创建 系统环境&#xff1a;银河麒麟V10 数据库版本&#xff1a;dm8 一、创建数据库实例 1.通过命令切换到路径/dm8/tool 2.执行命令进入配置助手 ./dbca.sh 选择一般用途&#xff0c;自动调整数据库性能参数&#xff0c;进行下一步操作&#xff1a; 设置数据…

SQL 经典实例

《SQL经典实例》 1&#xff0c;在WHERE子句中引用别名列 直接引用-报错 把查询包装为一个内嵌视图&#xff0c;这样就可以引用别名列了 select * from ( select sal as salary, comm as commission from emp ) x where salary < 5000同理&#xff1a;当你想在 WHERE 子句中…

SQL示例数据库

在本教程中&#xff0c;我们将向您介绍在整个教程中使用的SQL示例数据库。以下数据库关系图 - HR 示例数据库&#xff1a; 在这个HR 示例数据库有7个表&#xff1a; employees表存储员工的数据信息。 jobs表存储工作数据信息&#xff0c;包括职位和工资范围。 departments表…

数据库案例

目录 微信朋友圈设计 用户及用户关系 发朋友圈 CDN 发布表 相册表 时间线 刷朋友圈 删除、拉黑、标签、不让他看、三天可见该怎么办 谁可以看 标签 第二步的权限控制 评论和赞 微信朋友圈设计 用户及用户关系 肯定有用户表作为基础 用户关系表&#xff0c;用户…

SQL数据库编写及示例

一、 数据库编写 1、数据库常用约束 主键约束: primary key 外键约束: foreign key (references) 唯一值约束: unique 默认值约束: default 检查约束: check 非空约束: not null 标识列: identity 2、创建数据表注意事项 主外键数据类型必须一致 列与列之间用&#xff0c;间隔…

sqlserver:什么是数据库实例?

环境&#xff1a; window server 2019 datacentersqlserver2014 x64 问题&#xff1a; 什么是SQL server实例&#xff1f;数据库的对象架构是怎样设计的&#xff1f; 先把官方的解释贴出来&#xff1a; https://docs.microsoft.com/zh-cn/sql/relational-databases/databases…

【转】数据库设计实例一学习

​​​​​​数据库1​​​​​​​​​​​​​​​​​​​​​对多&#xff0c;1对1&#xff0c;M对N学习 以RBAC为例。​​​​​​​​​​​​​​ 于 RBAC&#xff08;Role-based Access Control&#xff09;权限访问控制。也就是说一个用户可以有多个角色&#xff…