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

这篇具有很好参考价值的文章主要介绍了【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的依赖项:
<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 包含在重新打包的存档中,如下所示:

<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应用程序不支持远程工具。文章来源地址https://www.toymoban.com/news/detail-794800.html

参考

  • Developer Tools

到了这里,关于【SpringBoot3】使用 devtools 实现代码热部署的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • springboot3使用自定义注解+AOP+redis优雅实现防重复提交

      ⛰️个人主页:     蒾酒 🔥 系列专栏 :《spring boot实战》 🌊 山高路远,行路漫漫,终有归途 目录 写在前面 实现思路 实现步骤 1.定义防重复提交注解 2.编写一个切面去发现该注解然后执行防重复提交逻辑 3.测试 依赖条件 1.接口上标记防重复提交注解 2.接口测试 写在最

    2024年04月11日
    浏览(38)
  • springboot项目如何自动重启(使用Devtools检测修改并自动重启springboot)

    1. 问题: 我们在项目开发阶段,可能经常会修改代码,修改完后就要重启Spring Boot。经常手动停止再启动,比较麻烦。 所以我们引入一个Spring Boot提供的开发工具; 只要源码或配置文件发生修改,Spring Boot应用可以自动重启,这样子我们做如下事情就会事半功倍: 修改类–保

    2024年02月14日
    浏览(33)
  • SpringBoot开发小技巧使用(DEBUG、启动图标修改、Lombok、devtools、Spring Initializr)

    在resources/application.properties中添加如下,开启DEBUG功能: 然后启动springboot应用,就可以看到DEBUG的日志。Positive表示生效,Negative表示不生效。如下所示: 下载百度的logo到resouces目录下,然后在resources/application.properties添加如下内容: 最后启动springboot应用。打印的日志如下,

    2024年02月15日
    浏览(44)
  • springboot3使用swagger文档

    在pom.xml里面引入如下俩个依赖 然后启动项目,打开浏览器访问 http://localhost:8080/swagger-ui.html 就可以看到生成的文档了  最后附上swagger2到open api的注解变化    

    2024年02月13日
    浏览(51)
  • springboot3 redis 实现分布式锁

    分布式锁介绍 分布式锁是一种在分布式系统中用于控制不同节点上的进程或线程对共享资源进行互斥访问的技术机制。 在分布式环境中,多个服务可能同时访问和操作共享资源,如数据库、文件系统等。为了保持数据的一致性和完整性,需要确保在同一时刻只有一个服务能

    2024年04月16日
    浏览(36)
  • SpringBoot3集成Kafka优雅实现信息消费发送

           首先,你的JDK是否已经是8+了呢?        其次,你是否已经用上SpringBoot3了呢?        最后,这次分享的是SpringBoot3下的kafka发信息与消费信息。        这次的场景是springboot3+多数据源的数据交换中心(数仓)需要消费Kafka里的上游推送信息,这里做数据

    2024年02月02日
    浏览(57)
  • SpringBoot3整合SpringSecurity,实现自定义接口权限过滤

    接口权限过滤是指对于某些接口或功能,系统通过设定一定的权限规则,只允许经过身份认证且拥有相应权限的用户或应用程序进行访问和操作 。这种技术可以有效地保护系统资源和数据安全,防止未授权的用户或程序进行恶意操作或非法访问。通常情况下,接口权限过滤需

    2024年02月08日
    浏览(53)
  • 基于Springboot3+微服务实现12306高性能售票系统

    💗博主介绍:全网CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者。 专注于Java、小程序技术领域和毕业项目实战💗 ✌Java、SSM+Vue、SpringBoot+Vue、NodeJS+Vue、微信小程序、Python、大数据、安卓。 你想要的我

    2024年02月20日
    浏览(77)
  • Springboot3.X整合Dubbo3.XSpringCloudAlibaba微服务 2022.0 + Springboot3.X 集成 Dubbo实现对外调用http内部调用RPC

    近期自己新开了一套SpringCloud Alibaba微服务项目,接口使用了对外HTTP,内部RPC的设计,具体点说就是外部用户或客户端通过Nginx访问到Gateway网关再分发到各个服务,内部各个服务之间统一使用Dubbo RPC进行通信。下面是Springboot3.x集成Dubbo的分享: 1. 需要的关键依赖 2. 启动程序入

    2024年02月15日
    浏览(38)
  • springboot3整合consul实现服务注册和配置管理快速入门

    服务注册: 配置管理: 注册中心的比较: 在微服务的世界中,服务注册是必不可少的。现在比较流行的也就是Consul和Nacos,Zookeeper没有管理界面,一般不建议使用,而Eureka已经处于停更,并且本身就存在很多bug,一般不建议使用! 我之前写过一篇spring boot整合nacos实现服务注

    2024年04月16日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包