Spring Boot 开发环境热部署详细教程

作者:章为忠 时间:2023-07-28 01:50:02 

在实际的项目开发过中,当我们修改了某个java类文件时,需要手动重新编译、然后重新启动程序的,整个过程比较麻烦,特别是项目启动慢的时候,更是影响开发效率。其实Spring Boot的项目碰到这种情况,同样也同样需要经历重新编译、重新启动程序的过程。 只不过 Spring Boot 提供了一个spring-boot-devtools的模块,使得 Spring Boot应用支持热部署,无需手动重启Spring Boot应用,,提高开发者的开发效率。接下来,聊一聊Spring Boot 开发环境热部署。

一、原理

devtools使用了两个类加载器(ClassLoader),一个是 Base类加载器(base classloader):加载那些不会改变的类,如:第三方Jar包等,而另一个是 Restart类加载器(restart classloader):负责加载那些正在开发的会改变的类。这样在有代码更改的时候,因为重启的时候只是加载了在开发的Class类,没有重新加载第三方的jar包,所以实现了较快的重启时间。

devtools 监听classpath下的文件变动(发生在保存时机),并且会立即重启应用。从而实现类文件和属性文件的热部署。

二、快速配置

1、pom配置

引入devtools的依赖


<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<!-- optional=true, 依赖不会传递, 该项目依赖devtools;之后依赖boot项目的项目如果想要使用devtools, 需要重新引入 -->
<optional>true</optional>
</dependency>

注意:optional=true, 依赖不会传递, 该项目依赖devtools;之后依赖boot项目的项目如果想要使用devtools, 需要重新引入。

2、application.properties配置

在application.properties中配置devtools。


# 关闭缓存即时刷新
#spring.thymeleaf.cache=false

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

说明:

devtools可以实现页面热部署,即页面修改后会立即生效,需要将application.properties文件中配置spring.thymeleaf.cache=false。

devtools会监听classpath下的文件变动,并且会立即重启应用。

3、IDEA配置

如果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

这样,就可以使用devtools实现热部署了。

最后

以上,就把如何配置Spring Boot 开发环境热部署介绍完了。还是比较简单的,大家自己去研究吧。

来源:https://www.cnblogs.com/zhangweizhong/p/12994509.html

标签:Spring,Boot,环境,热部署
0
投稿

猜你喜欢

  • java 字浮串提取方法汇集

    2023-11-24 14:43:16
  • Java如何定义Long类型

    2022-05-28 22:28:52
  • Java编程实现五子棋人人对战代码示例

    2021-12-27 12:58:51
  • 详解commons-pool2池化技术

    2021-09-10 10:56:29
  • Redis6搭建集群并在SpringBoot中使用RedisTemplate的实现

    2023-10-31 14:48:05
  • 学习Java HashMap,看这篇就够了

    2023-11-11 11:18:56
  • 图解Java线程的生命周期

    2022-04-12 15:16:10
  • Java基础之Stream流原理与用法详解

    2021-06-07 22:16:05
  • 深入理解java final不可变性

    2023-02-11 20:17:27
  • Java使用递归法解决汉诺塔问题的代码示例

    2023-09-05 20:31:28
  • SpringCloud消息总线Bus配置中心实现过程解析

    2023-02-14 10:05:18
  • Java 继承与多态超详细梳理

    2023-11-26 09:01:08
  • 如何将IDEA打成jar包并在windows后台运行

    2022-02-27 01:36:57
  • Java 关于时间复杂度和空间复杂度的深度刨析

    2023-11-10 16:07:39
  • 使用反射方式获取JPA Entity的属性和值

    2023-07-24 17:43:22
  • Java获取字符串编码格式实现思路

    2023-08-14 12:35:38
  • 三道java新手入门面试题,通往自由的道路--多线程

    2023-05-24 23:12:51
  • SpringCloud2020整合Nacos-Bootstrap配置不生效的解决

    2023-11-29 02:42:47
  • Java @GlobalLock注解详细分析讲解

    2023-06-03 03:55:53
  • 基于SSM实现学生管理系统

    2023-11-24 18:17:39
  • asp之家 软件编程 m.aspxhome.com