Spring 调试器
IntelliJ IDEA 可帮助您在设计时处理许多 Spring 相关问题。 但其中某些问题可能需要在运行时进行调查。 对于这种情况,IntelliJ IDEA 的调试器可以识别 Spring 上下文,并为您提供工具以检查并与在调试模式下运行的 Spring 应用程序交互。
安装 Spring Debugger 插件
此功能依赖于 Spring Debugger 插件,您需要安装并启用它。
按 Ctrl+Alt+S 打开设置,然后选择 。
打开 Marketplace 选项卡,找到 Spring Debugger 插件,然后点击 安装 (如果出现提示,请重启 IDE)。
Spring 调试器支持以下 运行配置 类型:
检查当前配置
在 .properties 中定义的属性通常会在运行时被覆盖,覆盖源可能是另一个 .properties 文件或某个 Bean。 如果运行时的实际值与 .properties 文件中指定的值不同,则相应行会显示一个 内联提示 ,以揭示实际的配置值。

如果一个属性在多个上下文中定义,嵌入提示将显示多个定义
导航到属性重定义
要查看是哪个代码段重写了属性值,点击显示实际值的嵌入提示。 重写的代码将在编辑器中打开。

数据库连接
在调试模式下运行 Spring 应用时,IntelliJ IDEA 会在 数据库 工具窗口中显示当前的数据库连接。
在其他场景下,当您处理以下内容时,此功能会很有用:
尚未在 IntelliJ IDEA 中设置的 数据源
大量数据库,例如微服务场景下
编排工具,例如 Docker Compose

在已发现的数据库中,您可以查看表、直接执行 SQL 查询、浏览架构等,其方式与使用任何其他 数据源 相同。

调试器表达式中的 Spring 上下文
当在 IntelliJ IDEA 的调试器中对表达式求值时,您可以访问所有属性和 bean,无论它们是否存在于当前执行上下文中。 这使您可以执行任何 bean 的方法以获取数据并验证假设。
在编辑器中计算表达式/添加监视
按住 Alt 并点击您想要评估的表达式。

或者,选择表达式,然后按 Ctrl+Alt+F8 或从出现的浮动工具栏中选择 计算表达式。

您可以通过点击工具栏中的
将该表达式添加到监视。
计算任意表达式 / 添加监视
要计算任意表达式,请在 变量 选项卡中的 计算表达式 字段中输入它,然后按 Enter。

结果显示在下面。 您还可以通过点击表达式字段右侧的
来 将表达式添加到 watches。

为方便起见,您可以点击靠近 结果 行的 探索元素 ,在单独的对话框中查看集合。 此视图对结果进行分页,并允许您搜索和筛选。

如果表达式的结果是 JSON 或 XML 格式的字符串,则可以将其作为结构化文档查看。 这使您可以使用编辑器功能,例如 代码折叠和 扩展或缩小选择 ,以便处理子树并在大型对象中方便地导航。

计算 Spring 属性值
在表达式字段的右侧,从菜单中选择 Spring 属性。
输入您要计算的属性,然后按 Enter。 属性值和详细信息显示在 结果 节点下。

如果您想为该属性设置监视,请在表达式字段的右侧点击
。
断点中的表达式
与表达式和监视类似,您可以在断点中使用表达式。 这样您可以添加临时日志,并仅在满足条件时暂停应用程序。
设置条件断点
右键点击 断点 ,并在 条件 字段中输入条件。

断点只有在条件求值为
true时才会暂停应用程序。
设置日志断点
右键点击 断点 ,点击 更多 ,然后在 评估并记录 字段输入日志表达式。

该断点将把表达式结果记录到控制台,并暂停应用程序。 如果仅希望记录表达式结果而不暂停应用程序,请取消选中 挂起 复选框。

有关断点类型和筛选器的信息,请参阅 断点页面。
查看 bean 的运行时信息
当您在编辑器中查看某个 bean 时,您可以查看其运行时信息。
在编辑器中,点击已加载 bean 的类定义旁边的装订区域图标(
)。

在出现的菜单中,选择 显示运行时信息。

会出现包含以下信息的弹出窗口:
已注入到 – 当前注入了此 bean 的其他 bean
依赖于 – 注入到此 bean 中的其他 bean;与 已注入到 相反。

调试事务
如果当前调试的操作发生在 JPA 事务中,您可以直接在调试器中查看会话上下文,包括事务的隔离级别、传播状态和缓存内容。
查看事务详情
在执行于事务内的某一行暂停应用程序。

打开 调试 工具窗口,并切换到 变量 标签页。 事务详情显示在 事务 节点下。

在事务中,您也可以导航到发起事务的代码位置。
导航到事务源
在 变量 标签页中,点击 导航到源代码

对于包含在事务内的 JPA 实体,可以在 调试 工具窗口的 变量 标签页以及代码中的实体引用处查看其当前状态:

检查已加载的 bean
当以调试模式运行 Spring 应用程序时, 项目 工具窗口可显示每个 bean 的运行状态,从 Spring 视角看:

图标颜色表示以下状态:
绿色 – 已加载
透明 – 未加载
黄色 – 已模拟
此外,bean 还可以具有以下图标之一:
:自动发现带有
@Component注解的 bean 以及带有@Bean注解的方法。:配置 bean(使用
@Configuration或其他隐式包含@Configuration的注释进行注释)。:存储库 bean(带有
@Repository注解或扩展org.springframework.data.repository.Repository接口)。:控制器(使用
@Controller和@RestController注解的类)。:隐式 bean,即由 Spring 添加的未明确定义的服务 bean。
:抽象 XML beans(在 XML 文件中用
abstract="true"属性定义)。:基础设施 bean,也就是在与配置和常规基础设施支持相关的 XML 文件中定义的 bean,如 ViewResolver 或带有
context:component-scan的 bean。:具有 prototype 范围的 beans(在 XML 文件中使用
scope="prototype"定义)。:在 XML 文件中定义的其他 bean。
禁用 Spring 调试器
您可以为特定的 运行/调试配置禁用 Spring Debugger 功能。
在运行/调试配置的设置中,点击 修改选项 ,然后选择 禁用 Spring 调试器。
