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

相关推荐
麦兜*2 小时前
Spring Boot集成方案 + Elasticsearch向量检索,语义搜索核弹
java·spring boot·python·spring·elasticsearch·spring cloud·系统架构
hweiyu003 小时前
IDEA搭建GO环境
开发语言·后端·golang·intellij-idea·idea·intellij idea
yh云想4 小时前
《RedisTemplate 核心操作全解析》
redis·spring·redistemplate
柊二三4 小时前
spring boot开发中的资源处理等问题
java·spring boot·后端
一枚小小程序员哈4 小时前
基于springboot的宠物商城设计与实现
java·spring boot·spring·eclipse·tomcat·maven·宠物
萌萌哒草头将军5 小时前
Cursor 发布 1.4 版本,更智能更全面 🚀🚀🚀
intellij idea·visual studio code·cursor
风与尘6 小时前
RabbitMQ延时队列的两种实现方式
spring boot·分布式·中间件·rabbitmq
_码农121386 小时前
简单spring boot项目,之前练习的,现在好像没有达到效果
java·spring boot·后端
巴拉巴巴巴拉7 小时前
Spring Boot 整合 Web 开发全攻略
spring boot
一个儒雅随和的男子9 小时前
Spring Security 框架深度集成与开发指南
java·后端·spring