使用Spring Boot DevTools加快开发速度(一)。

简介: DevTools 支持自动刷新与自动重启 –自动刷新(或自动加载)是指在浏览器中重新加载UI,以查看静态内容的更改。自动重新启动是指重新加载服务器端代码和配置,然后重新启动服务器。

Spring Boot开发者工具


DevTools 支持 自动刷新自动重启 –自动刷新(或自动加载)是指在浏览器中重新加载UI,以查看静态内容的更改。自动重新启动是指重新加载服务器端代码和配置,然后重新启动服务器。

如何使用DevTools进一步加快Spring Boot开发的速度,并使之更加有趣和高效?

设定


像通常使用Spring Boot一样,设置非常简单。您需要做的就是添加正确的依赖关系,您就可以开始工作了。Spring Boot会检测到这一点,并相应地自动配置DevTools。

如果您使用的是Maven:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
</dependency>

另外,在使用Gradle时:

configurations {
    developmentOnly
    runtimeClasspath {
        extendsFrom developmentOnly
    }
}
dependencies {
    developmentOnly("org.springframework.boot:spring-boot-devtools")
}

请注意,该依赖项被声明为可选。这个很重要。这样可以防止将DevTools依赖项过渡性地应用于依赖于项目的其他模块。


自动重启

只要您的类路径上的文件发生更改,DevTools就会在应用了新更改的情况下自动重启正在运行的应用程序。在本地进行开发时,这很有用,因为您无需手动重新部署应用程序。


就其本身而言,它并不是那么有用,因为重新启动仍会花费大量时间。幸运的是,由于DevTools使用了一个巧妙的技巧,这些重启比常规重启快得多。

您会看到,在开发应用程序时,通常会更改一个或几个类,并希望在运行的应用程序中检查结果以获取反馈。您更改了应用程序的一小部分,因为大多数已加载的类来自框架和第三方库。


引擎盖下,Spring DevTools 使用两个类加载器—— BaseClassLoader 和 RestartClassLoader。不变的类由基本类加载器加载。正在使用的类由重新启动类加载器加载。每当触发重新启动时,重新启动类加载器都会被丢弃并重新创建。这种重启应用程序的速度比平常快得多,并且可以替代使用诸如 JRebel 之类的动态类来重新加载应用程序。


在IDE中触发重启

只要类路径发生更改,就会触发重新启动。但是,这取决于您的IDE。这意味着仅更改 .java 文件是不够的。重要的是您的IDE实际上会更新 .class 类路径上的文件。

使 IntelliJ IDEA 时,需要构建项目(Ctrl+ F9或Build → Build Project)。您还可以将 IDEA 配置为自动重建。另外,您可以打开Spring Boot运行配置并定义触发应用程序更新(Ctrl+ F10)时发 生的情况:RYA598EU11ZZM_MQ8M[3EIX.png


Intellij IDEA Spring Boot 运行配置

在第一个组合框中,可以选择 Update trigger file 在调用 Update 操作时触发 DevTools 重新启动。或者,您甚至可以选择尝试热插拔的选项,并且仅在热插拔失败时才使用 DevTools 重新启动。


在第二个组合框中,您可以配置在 IDEA 窗口失去焦点时(例如,切换到浏览器窗口时)重新加载所有静态资源和模板。

在 Eclipse 中,仅保存文件就足够了。


仅开发

Spring Boot DevTools 的使用仅用于开发,而不用于生产。如果您的应用程序检测到您正在生产中,则将自动禁用 DevTools。

为此,每当您将应用程序作为完全打包的工件(例如带有嵌入式应用程序服务器的jar)运行时,都将其视为生产应用程序:

java -jar devtools-example-1.0.0.jar


通过特殊的类加载器(例如在应用程序服务器上)启动应用程序时,同样适用。相反,当您运行分解的工件(例如在IDE中)时,您的应用程序将被视为处于开发模式。使用 spring-boot-plugin 运行应用程序时也是如此:

Maven:
mvn spring-boot:run
Gradle:
gradle bootRun


实时重载

LiveReload 是一个有用的工具,它使您可以在更改 HTML,CSS,图像等文件时立即在浏览器中更新页面。它甚至可以根据需要对文件进行预处理-这意味着会自动编译您的 SASS 或 LESS 文件。


实时重新加载

Spring DevTools 自动启动 LiveReload 服务器的本地实例,该实例监视您的文件。您所需要做的就是安装浏览器扩展程序,一切顺利。它不仅对开发应用程序的前端很有用(以防您将其作为Spring应用程序工件的一部分进行分发),而且还可以用于监视和重新加载REST API的输出。

8CTVW{85ER599M$F6{RBN]6.png

属性覆盖

在本地开发应用程序时,通常与在生产环境中运行时具有不同的配置需求。缓存就是一个例子。在生产中,至关重要的是依赖于各种缓存(例如,模板引擎的缓存,静态资源的缓存头等)。在开发中,它可能会因提供旧数据而没有反映您的最新更改而使您感到痛苦。另一个示例可能是增强的日志记录,它在开发中可能有用,但对于生产而言却过于详细。

自己管理双套配置不必要地复杂。好消息是,Spring Boot DevTools开箱即用为您的本地开发配置了许多属性。

spring.thymeleaf.cache=false
spring.freemarker.cache=false
spring.groovy.template.cache=false
spring.mustache.cache=false
server.servlet.session.persistent=true
spring.h2.console.enabled=true
spring.resources.cache.period=0
spring.resources.chain.cache=false
spring.template.provider.cache=false
spring.mvc.log-resolved-exception=true
server.servlet.jsp.init-parameters.development=true
spring.reactor.stacktrace-mode.enabled=true

您可以在DevToolsPropertyDefaultsPostProcessor中检查所有属性的列表。



相关文章
|
6月前
|
前端开发 Java 关系型数据库
基于Java+Springboot+Vue开发的鲜花商城管理系统源码+运行
基于Java+Springboot+Vue开发的鲜花商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的鲜花商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。技术学习共同进步
454 7
|
1月前
|
安全 数据可视化 Java
AiPy开发的 Spring 漏洞检测神器,未授权访问无所遁形
针对Spring站点未授权访问问题,现有工具难以检测如Swagger、Actuator等组件漏洞,且缺乏修复建议。全新AI工具基于Aipy开发,具备图形界面,支持一键扫描常见Spring组件,自动识别未授权访问风险,按漏洞类型标注并提供修复方案,扫描结果可视化展示,支持导出报告,大幅提升渗透测试与漏洞定位效率。
|
6月前
|
人工智能 Java 数据库
飞算 JavaAI:革新电商订单系统 Spring Boot 微服务开发
在电商订单系统开发中,传统方式耗时约30天,需应对复杂代码、调试与测试。飞算JavaAI作为一款AI代码生成工具,专注于简化Spring Boot微服务开发。它能根据业务需求自动生成RESTful API、数据库交互及事务管理代码,将开发时间缩短至1小时,效率提升80%。通过减少样板代码编写,提供规范且准确的代码,飞算JavaAI显著降低了开发成本,为软件开发带来革新动力。
|
5月前
|
供应链 JavaScript BI
ERP系统源码,基于SpringBoot+Vue+ElementUI+UniAPP开发
这是一款专为小微企业打造的 SaaS ERP 管理系统,基于 SpringBoot+Vue+ElementUI+UniAPP 技术栈开发,帮助企业轻松上云。系统覆盖进销存、采购、销售、生产、财务、品质、OA 办公及 CRM 等核心功能,业务流程清晰且操作简便。支持二次开发与商用,提供自定义界面、审批流配置及灵活报表设计,助力企业高效管理与数字化转型。
512 2
ERP系统源码,基于SpringBoot+Vue+ElementUI+UniAPP开发
|
4月前
|
Java API 微服务
Java 21 与 Spring Boot 3.2 微服务开发从入门到精通实操指南
《Java 21与Spring Boot 3.2微服务开发实践》摘要: 本文基于Java 21和Spring Boot 3.2最新特性,通过完整代码示例展示了微服务开发全流程。主要内容包括:1) 使用Spring Initializr初始化项目,集成Web、JPA、H2等组件;2) 配置虚拟线程支持高并发;3) 采用记录类优化DTO设计;4) 实现JPA Repository与Stream API数据访问;5) 服务层整合虚拟线程异步处理和结构化并发;6) 构建RESTful API并使用Springdoc生成文档。文中特别演示了虚拟线程配置(@Async)和StructuredTaskSco
475 0
|
4月前
|
监控 安全 Java
Java 开发中基于 Spring Boot 3.2 框架集成 MQTT 5.0 协议实现消息推送与订阅功能的技术方案解析
本文介绍基于Spring Boot 3.2集成MQTT 5.0的消息推送与订阅技术方案,涵盖核心技术栈选型(Spring Boot、Eclipse Paho、HiveMQ)、项目搭建与配置、消息发布与订阅服务实现,以及在智能家居控制系统中的应用实例。同时,详细探讨了安全增强(TLS/SSL)、性能优化(异步处理与背压控制)、测试监控及生产环境部署方案,为构建高可用、高性能的消息通信系统提供全面指导。附资源下载链接:[https://pan.quark.cn/s/14fcf913bae6](https://pan.quark.cn/s/14fcf913bae6)。
645 0
|
6月前
|
人工智能 Java 定位技术
Java 开发玩转 MCP:从 Claude 自动化到 Spring AI Alibaba 生态整合
本文详细讲解了Java开发者如何基于Spring AI Alibaba框架玩转MCP(Model Context Protocol),涵盖基础概念、快速体验、服务发布与调用等内容。重点包括将Spring应用发布为MCP Server(支持stdio与SSE模式)、开发MCP Client调用服务,以及在Spring AI Alibaba的OpenManus中使用MCP增强工具能力。通过实际示例,如天气查询与百度地图路线规划,展示了MCP在AI应用中的强大作用。最后总结了MCP对AI开发的意义及其在Spring AI中的实现价值。
1546 9