【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应用程序不支持远程工具。

参考

相关推荐
迷迭所归处6 分钟前
C++ —— 关于vector
开发语言·c++·算法
架构文摘JGWZ34 分钟前
Java 23 的12 个新特性!!
java·开发语言·学习
leon62535 分钟前
优化算法(一)—遗传算法(Genetic Algorithm)附MATLAB程序
开发语言·算法·matlab
拾光师1 小时前
spring获取当前request
java·后端·spring
aPurpleBerry2 小时前
neo4j安装启动教程+对应的jdk配置
java·neo4j
锦亦之22332 小时前
QT+OSG+OSG-earth如何在窗口显示一个地球
开发语言·qt
我是苏苏2 小时前
Web开发:ABP框架2——入门级别的增删改查Demo
java·开发语言
姜太公钓鲸2332 小时前
c++ static(详解)
开发语言·c++
菜菜想进步2 小时前
内存管理(C++版)
c语言·开发语言·c++
xujinwei_gingko2 小时前
Spring IOC容器Bean对象管理-Java Config方式
java·spring