【SpringBoot3】使用 devtools 实现代码热部署

文章目录

一、Spring Boot DevTools 简介

Spring Boot DevTools是一组用于提高开发人员生产力,并加速Spring Boot应用程序开发的工具。它提供了一些功能,可以帮助开发人员更快速地构建应用程序,并减少常见的开发问题。

Spring Boot DevTools的主要作用包括:

  1. 自动重新加载:当应用程序中的代码发生变化时,DevTools会自动重新加载应用程序,而无需手动重新启动服务器。这可以节省大量时间,尤其是在开发过程中进行代码调试和迭代时。
  2. 实时监控:DevTools提供了实时的应用程序监控功能,可以显示应用程序的运行状态、内存使用情况、线程状态等信息。这有助于开发人员快速了解应用程序的状态和性能,并及时发现和解决问题。
  3. 自动配置:DevTools可以根据开发环境自动配置应用程序,如启用H2数据库控制台、禁用安全等。这可以减少开发人员手动配置应用程序的需求,并加快开发过程。
  4. 日志管理:DevTools提供了一个集中的日志管理功能,可以显示应用程序的日志信息,并在出现问题时提供更详细的错误堆栈跟踪。这有助于开发人员快速定位和解决问题。

二、使用步骤

  1. 创建一个新的Spring Boot项目,可以使用Spring Initializr或Maven/Gradle等构建工具。
  2. 在项目的pom.xml文件中,添加Spring Boot DevTools的依赖项:
xml 复制代码
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <scope>runtime</scope>
    <optional>true</optional>
</dependency>
  1. 保存并关闭pom.xml文件。
  2. 在IDE中导入项目,并启动应用程序。
  3. 在应用程序运行时,DevTools将自动启用。

现在,当您在应用程序的代码中进行更改时,DevTools将自动重新加载应用程序,而无需手动重新启动服务器。您还可以使用DevTools提供的实时监控和日志管理功能来监视应用程序的状态和性能,并快速定位和解决问题。

三、实时监控

Spring Boot DevTools 提供了实时监控功能,这对于开发和调试应用程序来说非常有用。下面我将介绍如何使用 DevTools 的实时监控功能。

1、使用 DevTools 的实时监控功能

DevTools 的一个重要特性是自动重启。当你对代码做出更改并保存时,应用会自动重启,这使得改动能够快速生效。

以下是一个示例流程:

  1. 启动应用程序: 使用 IDE 或命令行启动你的 Spring Boot 应用。

  2. 修改代码: 当应用运行时,尝试更改一些代码。例如,修改一个控制器的返回值。

  3. 自动重启: 保存更改后,DevTools 将检测到这些更改并自动重新启动应用程序。这意味着你无需手动停止和重新启动服务器。

  4. 查看更改: 在浏览器或测试工具中重新请求你更改的端点,你应该能看到新的更改已经生效。

2、监控静态资源和视图模板

DevTools 不仅可以监控 Java 文件的更改,还可以监控静态资源(如 HTML、CSS、JavaScript 文件)和视图模板的更改。对这些资源的更改通常无需重启应用程序,DevTools 会自动应用这些更改。

3、其他实时监控功能

除了自动重启,DevTools 还提供了其他实用的实时监控功能,如:

  • 实时应用属性重载:application.propertiesapplication.yml 文件中做出的更改可以在不重启应用的情况下自动生效。
  • 远程应用监控: DevTools 可以配置用于远程应用,允许你监控和调试部署在不同环境中的应用程序。

4、注意事项

  • 性能影响: DevTools 主要用于开发环境,因为它可能会影响应用程序的性能。
  • 安全性: 确保不要在生产环境中部署 DevTools,因为它可能打开一些不安全的端点。

通过使用 Spring Boot DevTools,你可以显著提高开发效率,实现快速迭代和测试。这些实时监控功能为开发人员提供了即时反馈,有助于快速发现并修复问题,同时也使得实验新想法变得更加容易。

四、默认属性配置

Spring Boot 支持的几个库使用缓存来提高性能。例如,模板引擎缓存编译后的模板,以避免重复解析模板文件。此外,Spring MVC 在提供静态资源时,可以在响应中添加 HTTP 缓存头。

虽然缓存对生产非常有益,但在开发过程中可能会适得其反,导致您无法看到刚刚在应用程序中做出的更改。因此,spring-boot-tools 默认禁用缓存选项。

缓存选项通常通过 application.properties 文件中的设置进行配置。例如,Thymeleaf 提供了 spring.phrine.cache 属性。spring-boot-tools 模块会自动应用合理的开发时配置,而不需要手动设置这些属性。

下表列出了应用的所有属性:

名称 默认值
server.error.include-binding-errors always
server.error.include-message always
server.error.include-stacktrace always
server.servlet.jsp.init-parameters.development true
server.servlet.session.persistent true
spring.docker.compose.readiness.wait only-if-started
spring.freemarker.cache false
spring.graphql.graphiql.enabled true
spring.groovy.template.cache false
spring.h2.console.enabled true
spring.mustache.servlet.cache false
spring.mvc.log-resolved-exception true
spring.reactor.netty.shutdown-quiet-period 0s
spring.template.provider.cache false
spring.thymeleaf.cache false
spring.web.resources.cache.period 0
spring.web.resources.chain.cache false

注意:如果你不希望应用属性默认值,可以在 application.properties 中将 spring.devtools.add-properties 设置为 false。

因为在开发 Spring MVC 和 Spring WebFlux 应用程序时需要更多关于 Web 请求的信息,开发人员工具建议您为 Web 日志组启用DEBUG日志记录。这将为您提供有关传入请求、处理它的处理程序、响应结果和其他详细信息的信息。如果您希望记录所有请求详细信息(包括潜在的敏感信息),您可以打开 spring.mvc.log-request-detailsspring.codec.log-request-details 配置属性。

五、LiveReload

spring-boot-tools模块包含一个嵌入式LiveReload服务器,可以在资源更改时触发浏览器刷新。LiveReload浏览器扩展程序可免费用于Chrome、Firefox和Safari。您可以在所选浏览器的市场或商店中搜索"LiveReload"来找到这些扩展程序。

如果你不想在应用程序运行时启动LiveReload服务器,你可以将spring.tools.livereload.enabled属性设置为false

注:一次只能运行一个 LiveReload 服务器。在启动应用程序之前,请确保没有其他 LiveReload 服务器正在运行。如果从IDE启动多个应用程序,则只有第一个应用程序具有 LiveReload 支持。

六、全局设置

你可以通过这个目录下的文件 $HOME/.config/spring-boot 修改 devtools的全局配置

  • spring-boot-devtools.properties

  • spring-boot-devtools.yaml

  • spring-boot-devtools.yml

添加到这些文件的任何属性都适用于您机器上使用 devtools 的所有 Spring Boot 应用程序

默认情况下,$HOME 是用户的主目录。要自定义此位置,请设置 SPRING_DEVTOOLS_HOME 环境变量或 spring.tools.home 系统属性。

如果在 $HOME/.config/spring-boot 中找不到 devtools 配置文件,则会搜索 $HOME 目录的根目录是否存在 .spring-boot-devtools.properties 文件。这允许您与不支持 $HOME/.config/spring-boot 位置的旧版本 Spring Boot 上的应用程序共享 devtools 全局配置。
DevTools properties/yaml 文件中不支持 Profiles 配置。

七、远程应用程序

Spring Boot DevTools不限于本地开发。您还可以在远程运行应用程序时使用多种功能。

远程支持是可选的,因为启用它可能会带来安全风险。它只应在受信任的网络上运行或使用 SSL 进行保护时启用。如果这两种选项都不可用,则不应使用 DevTools 的远程支持。您永远不应该在生产部署中启用支持。

要启用它,您需要确保 DevTools 包含在重新打包的存档中,如下所示:

xml 复制代码
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <excludeDevtools>false</excludeDevtools>
            </configuration>
        </plugin>
    </plugins>
</build>

然后,您需要设置 spring.devtools.remote.secret 属性。与任何重要的密码或秘密一样,该值应该是唯一且强壮的,这样它就不能被猜测或暴力破解。

远程开发工具支持分为两部分:接受连接的服务器端端点和在 IDE 中运行的客户端应用程序。设置 spring.devtools.remote.secret 属性时,服务器组件会自动启用。客户端组件必须手动启动。

Spring WebFlux应用程序不支持远程工具。

参考

相关推荐
minji...7 分钟前
C++ 详细讲解vector类
开发语言·c++
LiuYaoheng10 分钟前
【Android】View 的基础知识
android·java·笔记·学习
勇往直前plus18 分钟前
Sentinel微服务保护
java·spring boot·微服务·sentinel
星辰大海的精灵18 分钟前
SpringBoot与Quartz整合,实现订单自动取消功能
java·后端·算法
小鸡脚来咯21 分钟前
一个Java的main方法在JVM中的执行流程
java·开发语言·jvm
江团1io022 分钟前
深入解析三色标记算法
java·开发语言·jvm
天天摸鱼的java工程师30 分钟前
RestTemplate 如何优化连接池?—— 八年 Java 开发的踩坑与优化指南
java·后端
m0_7381207233 分钟前
CTFshow系列——PHP特性Web97-100
开发语言·安全·web安全·php·ctfshow
你我约定有三34 分钟前
java--泛型
java·开发语言·windows
杨杨杨大侠41 分钟前
第3章:实现基础事件总线
java·github·eventbus