详解SpringBoot配置devtools实现热部署

发布时间 - 2026-01-11 01:03:16    点击率:

spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用。

devtools的原理

深层原理是使用了两个ClassLoader,一个Classloader加载那些不会改变的类(第三方Jar包),另一个ClassLoader加载会更改的类,称为restart ClassLoader,这样在有代码更改的时候,原来的restart ClassLoader 被丢弃,重新创建一个restart ClassLoader,由于需要加载的类相比较少,所以实现了较快的重启时间。

使用需要添加以下的配置:

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>

  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
  </dependency>
</dependencies>

<build>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
      <configuration>
        <fork>true</fork>
      </configuration>
    </plugin>
  </plugins>
</build>

说明:

(1) devtools可以实现页面热部署(即页面修改后会立即生效,这个可以直接在application.properties文件中配置spring.thymeleaf.cache=false来实现),实现类文件热部署(类文件修改后不会立即生效),实现对属性文件的热部署。 即devtools会监听classpath下的文件变动,并且会立即重启应用(发生在保存时机),注意:因为其采用的虚拟机机制,该项重启是很快的
 

(2)配置了后在修改java文件后也就支持了热启动,不过这种方式是属于项目重启(速度比较快的项目重启),会清空session中的值,也就是如果有用户登陆的话,项目重启后需要重新登陆。默认情况下,/META-INF/maven,/META-INF/resources,/resources,/static,/templates,/public这些文件夹下的文件修改不会使应用重启,但是会重新加载(devtools内嵌了一个LiveReload server,当资源发生改变时,浏览器刷新)。

devtools的配置

在application.properties中配置spring.devtools.restart.enabled=false,此时restart类加载器还会初始化,但不会监视文件更新。
 在SprintApplication.run之前调用System.setProperty(“spring.devtools.restart.enabled”, “false”);可以完全关闭重启支持,配置内容:

#热部署生效
spring.devtools.restart.enabled: true
#设置重启的目录
#spring.devtools.restart.additional-paths: src/main/java
#classpath目录下的WEB-INF文件夹内容修改不重启
spring.devtools.restart.exclude: WEB-INF/**

IDEA配置

当我们修改了Java类后,IDEA默认是不自动编译的,而spring-boot-devtools又是监测classpath下的文件发生变化才会重启应用,所以需要设置IDEA的自动编译:

(1)File-Settings-Compiler-Build Project automatically

(2)ctrl + shift + alt + /,选择Registry,勾上 Compiler autoMake allow when app running

测试

  1. 修改类–>保存:应用会重启
  2. 修改配置文件–>保存:应用会重启
  3. 修改页面–>保存:应用不会重启,但会重新加载,页面会刷新(原理是将spring.thymeleaf.cache设为false,参考:Spring Boot配置模板引擎)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# spring  # boot  # devtools  # springboot  # dev  # tools  # 热部署  # springBoot 插件工具热部署 Devtools的步骤详解  # 一篇文章带你搞定SpringBoot中的热部署devtools方法  # SpringBoot2.X Devtools热部署实现解析  # Springboot项目基于Devtools实现热部署步骤详解  # SpringBoot Devtools实现项目热部署的方法示例  # springboot + devtools(热部署)实例教程  # SpringBoot使用DevTools实现后端热部署的过程详解  # 重启  # 加载  # 较快  # 又是  # 也就  # 才会  # 还会  # 设为  # 可以直接  # 为其  # 可以实现  # 会使  # 当我们  # 第三方  # 较少  # 后会  # 该项  # 来实现  # 用户登陆  # 配置文件 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: ,在苏州找工作,上哪个网站比较好?  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  Java遍历集合的三种方式  Laravel如何自定义错误页面(404, 500)?(代码示例)  javascript中的try catch异常捕获机制用法分析  如何在建站宝盒中设置产品搜索功能?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  通义万相免费版怎么用_通义万相免费版使用方法详细指南【教程】  Laravel中间件起什么作用_Laravel Middleware请求生命周期与自定义详解  php485函数参数是什么意思_php485各参数详细说明【介绍】  如何在Tomcat中配置并部署网站项目?  Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出  使用Dockerfile构建java web环境  文字头像制作网站推荐软件,醒图能自动配文字吗?  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  Bootstrap整体框架之CSS12栅格系统  如何解决hover在ie6中的兼容性问题  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  如何在不使用负向后查找的情况下匹配特定条件前的换行符  Win11怎么开启自动HDR画质_Windows11显示设置HDR选项  个人网站制作流程图片大全,个人网站如何注销?  香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南  详解vue.js组件化开发实践  Laravel如何实现全文搜索_Laravel Scout集成Algolia或Meilisearch教程  php结合redis实现高并发下的抢购、秒杀功能的实例  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  Android自定义listview布局实现上拉加载下拉刷新功能  Android中Textview和图片同行显示(文字超出用省略号,图片自动靠右边)  Laravel如何实现多对多模型关联?(Eloquent教程)  Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】  如何正确选择百度移动适配建站域名?  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置  Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道  利用python获取某年中每个月的第一天和最后一天  Laravel如何实现多语言支持_Laravel本地化与国际化(i18n)配置教程  Laravel如何实现一对一模型关联?(Eloquent示例)  Laravel如何处理和验证JSON类型的数据库字段  HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】  ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法  北京网站制作公司哪家好一点,北京租房网站有哪些?  免费视频制作网站,更新又快又好的免费电影网站?  Windows11怎样设置电源计划_Windows11电源计划调整攻略【指南】  想要更高端的建设网站,这些原则一定要坚持!  消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工  如何在阿里云香港服务器快速搭建网站?  宙斯浏览器怎么屏蔽图片浏览 节省手机流量使用设置方法  LinuxCD持续部署教程_自动发布与回滚机制  如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程  微信小程序 canvas开发实例及注意事项