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 的属性和方法。更多的使用方法和技巧有待大家一起探索。如果我发现了些特定场景下的丝滑小妙招,也会继续分享出来,欢迎大家一起讨论。

相关推荐
梦飞翔2386 小时前
Spring Boot
spring boot
青柠编程7 小时前
基于Spring Boot的选课管理系统架构设计
java·spring boot·后端
前端橙一陈7 小时前
LocalStorage Token vs HttpOnly Cookie 认证方案
前端·spring boot
RainbowSea8 小时前
9. Spring AI 当中对应 MCP 的操作
java·spring·ai编程
RainbowSea8 小时前
10. Spring AI + RAG
java·spring·ai编程
每次的天空9 小时前
Android -Glide实战技术总结
java·spring boot·spring
Code blocks11 小时前
SpringBoot快速生成二维码
java·spring boot·后端
java水泥工11 小时前
师生健康信息管理系统|基于SpringBoot和Vue的师生健康信息管理系统(源码+数据库+文档)
数据库·vue.js·spring boot
上官浩仁11 小时前
springboot3 mybatis 数据库操作入门与实战
spring boot·mybatis·db
muxin-始终如一12 小时前
Spring框架面试问题及详细回答
java·spring·面试