Spring Boot之DevTools介绍

2024-09-08 05:12
文章标签 java 介绍 spring boot devtools

本文主要是介绍Spring Boot之DevTools介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Spring Boot DevTools 是 Spring Boot 提供的一组易于使用的工具,旨在加速开发和测试过程。它通过提供一系列实用的功能,如自动重启、实时属性更新、依赖项的热替换等,极大地提高了开发者的开发效率。本文将详细介绍 Spring Boot DevTools 的主要特性、工作原理,并提供一个完整的代码示例。

目录

一、Spring Boot DevTools 主要特性

1、自动重启

2、实时属性更新

 4、全局配置文件

5、自定义重启策略

二、Spring Boot DevTools 工作原理

三、代码示例

1. 添加 Maven 依赖

2. 配置自动重启

3. 编写一个简单的 Spring Boot 应用程序

4. 验证自动重启功能

四、注意事项

1、性能考虑

2、IDE 配置

3、资源监控

4、LiveReload

五、总结


一、Spring Boot DevTools 主要特性

1、自动重启

1)当类路径下的文件(包括类文件、属性文件、页面等)发生变化时,DevTools 可以自动重启应用程序。这减少了开发者在代码更改后进行手动重启的时间,提高了开发效率。

2)DevTools 使用了两个类加载器(base classloader 和 restart classloader)来实现快速重启。base classloader 加载不会变化的类(如第三方库),而 restart classloader 加载开发者自己编写的、会变化的类。当需要重启时,restart classloader 会被一个新的类加载器替换,而 base classloader 保持不变,从而实现了快速重启。

2、实时属性更新

允许在运行时更改 application.properties 或 application.yml 文件中的配置,并立即生效,无需重启应用程序。这对于调试和测试不同配置非常有用。

3、依赖项的热替换

对于更改的静态资源(如 HTML、CSS、JS 文件)等,DevTools 可以进行热替换,即在不重启应用程序的情况下立即加载新的资源。这提高了前端开发的工作效率。

 4、全局配置文件

提供了一个全局的 application.properties 或 application.yml 配置文件,该文件可以在不重启应用程序的情况下动态修改。

5、自定义重启策略

允许开发者自定义哪些文件的更改会触发重启。例如,可以配置只监控特定目录下的文件变化,或者排除某些目录下的文件变化。

二、Spring Boot DevTools 工作原理

Spring Boot DevTools 的自动重启功能主要依赖于两个类加载器:

  • Base Classloader:用于加载不会变化的类,如项目引用的第三方 jar 包。这些类在应用程序启动时被加载,并在整个应用程序生命周期中保持不变。
  • Restart Classloader:用于加载开发者自己编写的、会变化的类。当类路径下的文件发生变化时,Restart Classloader 会被一个新的类加载器替换,从而实现了快速重启。由于 Base Classloader 保持不变,所以重启速度非常快。

三、代码示例

以下是一个使用 Spring Boot DevTools 的简单示例,展示了如何在项目中添加 DevTools 依赖,并配置一些基本属性。

1. 添加 Maven 依赖

首先,在项目的 pom.xml 文件中添加 Spring Boot DevTools 的依赖。注意,<optional>true</optional>是为了防止将 DevTools 依赖传递到其他模块中。

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

2. 配置自动重启

在 application.properties 或 application.yml 文件中,可以配置 DevTools 的自动重启功能。默认情况下,DevTools 已经开启了自动重启功能,但你可以通过配置来修改其行为。

# 开启或关闭自动重启
spring.devtools.restart.enabled=true# 设置不触发自动重启的资源目录
spring.devtools.restart.exclude=static/**,public/**,templates/**# 设置需要监控的额外路径
spring.devtools.restart.additional-paths=src/main/java# 开启 LiveReload 功能(可选)
spring.devtools.livereload.enabled=true

3. 编写一个简单的 Spring Boot 应用程序

以下是一个简单的 Spring Boot 应用程序示例,用于演示 DevTools 的使用。

// 引入 Spring Boot 相关的注解
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@SpringBootApplication
@RestController
public class DevToolsDemoApplication {public static void main(String[] args) {
SpringApplication.run(DevToolsDemoApplication.class, args);
}@GetMapping("/")
public String hello() {
return "Hello, DevTools!";
}
}

4. 验证自动重启功能

启动应用程序后,你可以尝试修改 DevToolsDemoApplication 类中的 hello 方法,或者修改 application.properties 文件中的配置,并保存更改。如果 DevTools 配置正确,并且你的 IDE 支持自动编译(如 IntelliJ IDEA 的自动编译功能),那么应用程序将自动重启,并应用你的更改。

四、注意事项

1、性能考虑

虽然 DevTools 可以显著提高开发效率,但在生产环境中应该关闭它,因为它可能会对性能产生负面影响。

2、IDE 配置

不同的 IDE 可能需要不同的配置才能与 DevTools 协同工作。例如,在 IntelliJ IDEA 中,你可能需要手动触发编译或使用插件来支持自动编译。

3、资源监控

DevTools 默认不会监控所有类型的资源变化。例如,静态资源(如 HTML、CSS、JS 文件)的变化通常不会触发重启,但可以通过配置来更改这一行为。

4、LiveReload

DevTools 集成了 LiveReload 功能,可以在资源发生变化时自动刷新浏览器。这对于前端开发非常有用,但也可以根据需要关闭它。

五、总结

Spring Boot DevTools 是一组强大的开发工具,通过提供自动重启、实时属性更新、依赖项的热替换等功能,极大地提高了开发者的开发效率。在开发过程中,合理地使用 DevTools 可以帮助开发者更快地迭代和验证代码,从而加速产品的开发周期。然而,在生产环境中应该关闭 DevTools,以避免对性能产生不必要的影响。

这篇关于Spring Boot之DevTools介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1147213

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数