Spring 调试终于不再痛苦了

这几天,JetBrains 更新了 IDEA 到 2025.2 版本,有一项更新内容,暂时没有直接在 IDEA 中提供,而是需要通过安装插件来获得,但我认为它是这个版本最重要的更新,它就是 Spring Debugger。

其实绝大部分 Java 开发者,都是 Spring 开发者,Spring 开发中的一些调试痛点也是很多人的共识。所以我看到这个以后便提起了兴趣,看看它到底能做什么。

根据官方帮助文档的介绍,它主要能提供以下几个方面的功能:

  1. 应用上下文的感知。如感知容器中 Bean 的加载情况,以及 Bean 的名称、类型、作用域等细节信息。
  2. 属性和配置的分析。如显示配置项的最终生效的值、查找这些值的来源、当前生效的配置文件等。
  3. 数据库连接和事务。如显示当前生效的数据库连接、查看当前事务的状态和属性等。

下面看几个示例的场景,看看如何把这些方便的功能应用到日常的开发调试中。

当遇到 Bean 注入错误的情况

有时候,我们写完一个 Bean,将它注入到另一个 Bean 中,发现 Spring 自动注入的并不是我们预期中它会注入的 Bean,或者 Spring 并没有注入。这个问题可能是以下几种情况造成的:

  1. 这个类文件被放在了错误的包中,导致 Spring 没有扫描到。
  2. 这个 Bean 被某个配置文件中的某个条件排除了。
  3. 有实现了同一个接口的其他优先级更高的类。
  4. 其他千奇百怪的原因。

以上列举的几个原因,并不都是那么容易被排查出来的,尤其是当你还不知道是什么原因的时候,不知道从哪儿查起。为了某一个单独的 Bean 的注入错误去 debug 容器初始化的过程,也不现实。这时候 Spring debugger 就能帮上一些忙。

首先,它可以在项目文件树中,展示哪些 Bean 被加载了,并且,每一个类型的 Bean 都有不同类型的图标,没有被加载的 Bean 会显示成灰色。

并且,在调试时,可以查看更多的 Bean 定义信息,如下图:

当你不知道那些生效的配置项的来源的时候

Spring 容器初始化的时候会读取各种各样的配置参数,这些配置参数的值有很多不同的来源,比如环境变量、命令行参数、配置文件,又或者 PostProcessor 等程序内部的处理逻辑,不仅来源众多,他们还有优先级,存在不同来源参数值的覆盖。

因此,当程序启动后加载的配置,跟你写的文件中不一样,或者跟你预期的不一样时,就需要查找这个配置的来源是哪里,它是如何生效的。

Spring debugger 可以在配置文件中,直接显示当前生效的值。

并且,这些值都是可以点击的,可以查看到这些值的来源。

数据库和事务相关的调试功能

Spring debugger 还会自动在 IDEA 的数据库工具窗口,创建出项目中用到的数据库连接。

对于 debug 程序时,进行到事务中的业务逻辑时,也可以在调试窗口直接查看事务的配置属性信息和状态:

其他

除了上述介绍的这些,还有一些更高阶的用法。

比如,在调试工具中使用 Spring 表达式添加观察点和设置条件断点,甚至可以在调试其中直接访问 Bean 的属性和方法。更多的使用方法和技巧有待大家一起探索。如果我发现了些特定场景下的丝滑小妙招,也会继续分享出来,欢迎大家一起讨论。

相关推荐
小当家.1056 小时前
从零构建项目认知:如何画出一张合格的系统架构图(以供应链系统为例)
java·spring boot·学习·架构·系统架构·供应链·实习
悟能不能悟6 小时前
springboot如何通过url地址获得这个地址的文件
java·spring boot·后端
问今域中6 小时前
Spring Security + JWT
java·后端·spring
沛沛老爹7 小时前
Web开发者突围AI战场:Agent Skills元工具性能优化实战指南——像优化Spring Boot一样提升AI吞吐量
java·开发语言·人工智能·spring boot·性能优化·架构·企业开发
Full Stack Developme7 小时前
Redis 实现主从同步
java·redis·spring
yangminlei7 小时前
Spring Boot 响应式 WebFlux 从入门到精通
java·spring boot·后端
曹轲恒7 小时前
SpringBoot配置文件
java·spring boot
DCTANT8 小时前
【原创】使用更优雅的方式改造MyBatisPlus逻辑删除插件
spring boot·后端·mysql·kotlin·mybatis·mybatisplus
musenh8 小时前
spring学习1
java·学习·spring
l***21788 小时前
Spring Boot 整合 log4j2 日志配置教程
spring boot·单元测试·log4j