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

相关推荐
夕除8 分钟前
redis--主从还是集群,内存
java·spring·mybatis
白露与泡影14 分钟前
Spring Boot 实现验证码:Hutool-captcha、AJ-Captcha、EasyCaptcha 到底怎么选?
java·spring boot·后端
seconp21 分钟前
基于Spring Boot和Vue 3的智慧旅游网站:住宿预订、行程规划与千问接入
vue.js·spring boot·毕业设计·软件工程·课程设计·旅游·毕设
vx_bisheyuange23 分钟前
基于SpringBoot的校园数字化图书馆系统
spring boot·毕业设计
小蒜学长28 分钟前
基于Springboot+Vue的高校教师教学业绩综合管理系统的设计与开发(代码+数据库+LW)
java·数据库·spring boot·后端·教学业绩管理·三级权限
Mikko730 分钟前
Spring Boot 3.5.16 自带的 Tomcat 10.1.55 中了哪些 CVE?其中一条是修上一个漏洞时带进来的
java·spring boot·后端·安全·tomcat
十年Java程序媛34 分钟前
Java 内部类全解|成员 / 静态 / 匿名内部类,理清和 Lambda 的区别
java·spring boot·面试
霸道流氓气质41 分钟前
AI 简历制作平台:结构化输出解析、多模板渲染与 PDF 导出的 Vue3 + Spring AI 全栈实战
人工智能·spring·pdf
SL_staff1 小时前
报工≠打卡:从任务报工到闭环管控的5个数据断点排查清单
java·spring boot·全栈
打工仔折腾 AI1 小时前
Spring AI + Qwen 周报生成实战:从原始日志到人工确认卡
人工智能·后端·python·spring·elasticsearch·ai agent 实战