SpringBoot使用DevTools实现后端热部署的过程详解

 更新时间:2023年11月16日 11:15:50   作者:放风讲故事  
在Spring Boot项目中,Spring Boot官方提供你了Devtools热部署模块,通过maven的方式导入就能使用,本文主要SpringBoot通过DevTools实现热部署,感兴趣的朋友一起看看吧

📑前言

本文主要SpringBoot通过DevTools实现热部署的文章,如果有什么需要改进的地方还请大佬指出⛺️

为什么要使用热部署

在没有使用热部署的情况下,一个稍微大点的项目启动就要七八秒甚至十几秒的启动时间,当然这取决于你的机器性能,不过毫无疑问,不管你的机器性能如何强大,也耗不过日益增长的项目体量,所以迫切需要无需重新启动项目也能将代码的增加修改同步到服务器的手段。

可选的热部署插件

在Spring Boot项目中,Spring Boot官方提供你了Devtools热部署模块,通过maven的方式导入就能使用。根据官方描述,Spring Boot Devtools插件使用了两种类加载器来加载资源:对于第三方的jar包使用base classloader来加载,这类资源一般比较固定,不会发生改动;而对于项目中的经常需要变动的代码类则使用restart classloader来加载。

Spring Boot Devtools 是什么?

顾名思义,DevTools为Spring开发人员提供了一些便利的开发期工具,其中包括:

代码变更后应用会自动重启;
当面向浏览器的资源(如模板、JavaScript、样式表)等发生变化时,会自动刷新浏览器;
自动禁用模板缓存;

在项目的开发中,当每次修改了后台代码后都需要重启服务,这样降低了开发效率。下面将介绍在SpringBoot项目中使用DevTools实现[热部署]
spring-boot-devtools是一个为开发者服务的一个模块,其中最重要的功能就是自动应用代码更改到最新的App上面去。原理是在发现代码有更改之后,重新启动应用,但是速度比手动停止后再启动还要更快,更快指的不是节省出来的手工操作的时间。

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

1、添加DevTools依赖在pom.xml中

pom.xml文件的配置

        <!--   热部署相关依赖,布置到线上的时候要去掉!     -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
            <scope>runtime</scope>
        </dependency>

依赖的取值为runtime,表示该依赖只在运行时生效,不会被打包到最终的可执行文件中。这意味着该依赖只在开发过程中起作用,不会影响到生产环境。

2、编辑application.yml配置文件

在application.yml配置文件中添加相关配置信息。

spring:
  devtools:
    restart:
      enabled: true  #设置开启热部署
      additional-paths: src/main/java #重启目录

这样配置后,当你修改了Java代码文件(位于src/main/java目录下)时,应用程序会自动重启。

3、IDEA的相关设置

(1)菜单:File → Settings → Build, Execution, Deployment → Compiler

在右侧的选项中找到 Build project automatically 选项并勾选,如下图:

(2)快捷键 Ctrl + Shift + Alt + / ,点击Registry项。

然后找到 compiler.automake.allow.when.app.running 选项并勾选,如下图:

4.4 测试

public ResponseResult login(@RequestBody User user){
	System.out.println("无自动部署");
	System.out.println("无自动部署");
	System.out.println("无自动部署");
...
}
public ResponseResult login(@RequestBody User user){
	System.out.println("无自动部署");
	System.out.println("无自动部署");
	System.out.println("无自动部署");
...
}

控制台输出

修改字段

public ResponseResult login(@RequestBody User user){
		System.out.println("自动部署");
		System.out.println("自动部署");
		System.out.println("自动部署");
		...
}

几秒后控制台自动运行

以上是springboot使用devtools的示例,可以根据自己的实际需求进行调整。

到此这篇关于SpringBoot使用DevTools实现后端热部署的文章就介绍到这了,更多相关SpringBoot后端热部署内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 在Java中使用YOLO模型的几种方式详解

    在Java中使用YOLO模型的几种方式详解

    Yolo是一种基于深度学习的目标检测算法,它可以在一张图像中同时检测出多个目标,并给出它们的位置和类别,相比于传统的目标检测算法,Yolo算法具有检测速度快、精度高等优点,本文给大家介绍了在Java中使用YOLO模型的几种方式,需要的朋友可以参考下
    2025-06-06
  • Java日期格式化之IllegalArgumentException与MySQL数据截断问题解决

    Java日期格式化之IllegalArgumentException与MySQL数据截断问题解决

    在Java开发中,日期时间处理和数据库字段映射是常见的任务,但也容易遇到各种问题,譬如IllegalArgumentException与MySQL数据截断问题,下面我们就来看看他们的具体解决方法吧
    2025-07-07
  • Java实现生产者消费者问题与读者写者问题详解

    Java实现生产者消费者问题与读者写者问题详解

    这篇文章主要介绍了Java实现生产者消费者问题与读者写者问题详解,小编觉得挺不错的,这里分享给大家,供需要的亲朋好友参考。
    2017-11-11
  • JAVA关键字及作用详解

    JAVA关键字及作用详解

    本文主要介绍了Java关键字及作用,具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • Spring Boot集成Redisson实现延迟队列

    Spring Boot集成Redisson实现延迟队列

    本文详细介绍了电商支付场景中利用Redisson的RDelayedQueue实现订单的延迟关闭功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-08-08
  • SpringBoot配置类编写过程图解

    SpringBoot配置类编写过程图解

    这篇文章主要介绍了SpringBoot配置类编写过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • spring-cloud入门之spring-cloud-config(配置中心)

    spring-cloud入门之spring-cloud-config(配置中心)

    这篇文章主要介绍了spring-cloud入门之spring-cloud-config(配置中心),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-01-01
  • 基于SpringBoot+Avue实现短信通知功能

    基于SpringBoot+Avue实现短信通知功能

    Avue是基于vue和element-ui的快速开发框架 ,它的核心是数据驱动UI的思想,让我们从繁琐的crud开发中解脱出来,本文将给大家介绍一下使用SpringBoot+Avue实现短信通知功能,文中有详细的代码示例,需要的朋友可以参考下
    2023-09-09
  • 关于Java中HashCode方法的深入理解

    关于Java中HashCode方法的深入理解

    这篇文章主要给大家介绍了关于Java中HashCode方法的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • Spring Boot 中 Properties 与 YAML 的深度解析与最佳实践记录(告别配置混乱)

    Spring Boot 中 Properties 与 YAML&nbs

    Spring配置用于管理组件和依赖,SpringBoot支持多种格式,默认使用application.properties或yml,Props简单但冗余,YAML结构清晰支持复杂数据,格式严格,建议统一配置类型避免冲突,本文介绍Spring Boot 中 Properties 与 YAML 的深度解析与最佳实践,感兴趣的朋友一起看看吧
    2025-07-07

最新评论