Команда Spring АйО перевела статью о работе со Spring Debugger и о том, как его применение существенно облегчает отладку приложений, написанных с использованием Spring Boot. На момент написания статьи фича доступна только в Ultimate версии IntelliJ IDEA.
Spring Boot — это настоящая находка для повышения производительности разработчиков. Он скрывает всю «инфраструктуру» и позволяет быстро приступить к работе. Компоненты «чудесным образом» внедряются, свойства «магически» подхватываются, а соединения с базой данных появляются, казалось бы, без какой-либо явной настройки.
Но когда что-то идёт не так, эта магия превращается в загадку, а отладка становится глубоким погружением во внутренние механизмы фреймворка.
Обычные отладчики работают с простыми классами и объектами Java и не предоставляют контекста, специфичного для фреймворка. Чтобы проверить значение свойства, отследить бин или изучить состояние сущности, приходится копаться во внутренностях Spring Boot. (Помните, как получить доступ к контексту приложения через выражение в отладчике? Мы тоже нет.)
На самом деле, «кролик всегда был в шляпе» — нужно было просто знать, где искать. В IntelliJ IDEA уже давно можно было просматривать загруженные бины или отслеживать источник значения свойства с помощью отладчика, но сделать это было не так-то просто. Наша цель — это изменить, сделать отладку Spring-приложений такой же удобной и эффективной, как и остальной опыт разработки в IntelliJ IDEA. Первым шагом было добавление дополнительного структурного представления, а теперь мы идём ещё дальше.
Давайте приоткроем завесу над «магией» Spring Boot и посмотрим, как плагин Spring Debugger делает невидимое видимым.
Если вам удобнее смотреть и слушать, обратите внимание на доклад Марко Бехлера на конференции Spring I/O 2025.
Бин, которого не оказалось
Spring Debugger разработан с акцентом на реальные задачи — он помогает вам понять, что на самом деле происходит внутри вашего Spring-приложения.
Вы написали класс. Вы аннотировали его как бин. Но он почему-то не работает.
Возможно, он находится не в том пакете. Возможно, его исключает какое-то условие. Возможно, он переопределён в тесте.
Spring Debugger позволяет увидеть всю картину:
Вы можете увидеть все бины, управляемые Spring, напрямую в дереве Project.
Помеченные серым пункты показывают вам, какие бины были отсканированы, но не инстанцированы.
Используете Mockito в тестах? Все бины, получившие свои mock-и, четко помечены оранжевым.

И это ещё не всё.

Во время пошаговой отладки вы можете просматривать метаданные бина, включая область видимости, активный профиль, контекст и даже исходный фабричный метод. Больше никаких догадок — определения бинов теперь становятся полноценной частью вашего отладочного процесса.
Лабиринт из свойств
Вы задали свойство в файле application.properties
, но приложение использует другое значение. Почему?
Механизм разрешения свойств в Spring Boot многоуровневый: значения из файлов, профили, переменные окружения, системные свойства, аргументы командной строки, пост-процессоры... Это настоящий лабиринт. Даже опытным разработчикам часто нужны дополнительные инструменты, чтобы разобраться.
Spring Debugger упрощает эту иерархию:
Он показывает фактическое выполняемое значение прямо в файлах
.properties
и.yaml
.Подсвечивает переопределённые значения и их исходные местоположения.
Для значений, зависящих от окружения или приходящих извне, отладчик чётко указывает источник через встроенный механизм просмотра.

Для значений, полученных из переменных окружения или внешних источников, Spring Debugger всё так же показывает их происхождение прямо в окне отладчика. Вам больше не нужно вручную отслеживать цепочку значений — это экономит время и снижает риск ошибок в настройке.
Потерянная транзакция
Вы аннотировали метод с @Transactional
, но транзакция не коммитится. Ещё хуже — вы получаете LazyInitializationException
. Что произошло?
Spring Debugger помогает разобраться в происходящем:
Он показывает встроенные индикаторы для методов, выполняющихся внутри активных транзакций.
Отображает полную информацию о транзакции: уровень изоляции, стратегию распространения и метод, с которого всё началось.
Визуальная иерархия вложенных транзакций позволяет понять цепочку вызовов и влияние настроек propagation.
Для JPA отображает состояние кэша первого уровня (L1 cache) и обновляет его в реальном времени.

Теперь вы точно знаете, находится ли ваш метод внутри ожидаемой транзакции — и где именно эта транзакция началась.
Клиент базы данных, который сконфигурировал сам себя
Ваше приложение подключается к базе данных — но как именно? Из какой конфигурации? Какой JDBC URL используется? В тестах — это Testcontainer? Или, может быть, in-memory база данных, такая как H2?

Spring Debugger делает всё это наглядным и доступным:
– Автоматически обнаруживает все активные конекшены DataSource.
– Группирует их по соответствующим конфигурациям запуска и отладки.
– Интегрируется с окном Database в IntelliJ IDEA для просмотра и анализа.
Вам больше не нужно вручную регистрировать соединения к базе данных или искать информацию в логах. Все активные DataSource видны сразу, и вы можете исследовать их в интерактивном режиме.
In-memory базы данных на данный момент отображаются, но просмотр данных в них пока не поддерживается.
Чтение бинов “из воздуха”
Отладчик на паузе. Вы хотите вызвать сервис, добавить тестовые данные или проверить состояние Spring-бина. Можно ли сделать это стандартным способом? Нет.
Spring Debugger меняет правила игры и позволяет:
Автодополнять все загруженные бины прямо в окне выражений отладчика.
Вызывать любые методы на любом бине на лету.

Процесс работы с бинами становится ещё удобнее: теперь мы можем проверять любое значение конфигурационного свойства прямо в отладчике. Всё, что нужно — выбрать соответствующий режим в окне выражений справа.

Это как REPL для вашего Spring-контекста. Вы можете экспериментировать, проверять, моделировать и подтверждать поведение приложения без перезапуска и без добавления тестового кода.
Для любознательных разработчиков: как это работает изнутри
Spring Debugger не требует Spring Boot Actuator или каких-либо дополнительных агентов во время выполнения. Все данные анализируются локально, без сетевых запросов, передачи данных или риска утечки, что гарантирует полную конфиденциальность. В основе своей работы плагин использует non-suspending breakpoints, установленные внутри библиотек Spring Boot. Во время запуска приложения, после загрузки контекста, Spring Debugger собирает информацию из текущей отладочной сессии, памяти (heap) и стека вызовов. Это позволяет получать «сырые» внутренние данные приложения без использования внешних библиотек.
Благодаря IntelliJ IDEA Debugger API, нам удалось вызывать необходимые методы из библиотек Spring Boot, строить модель состояния приложения во время выполнения и отображать её прямо в IDE.
Работа над Spring Debugger также привела к расширению API вычислителя отладчика, что позволило добавить собственные обработчики свойств наряду со стандартным Java-вычислителем. В будущем мы планируем развить эту возможность, чтобы поддерживать не только свойства, но и, например, выражения SpEL, SQL и другие подобные конструкции.
Подводя итоги
Spring Boot — мощный инструмент, но его абстракции могут быть непростыми для отладки. Spring Debugger превращает IntelliJ IDEA в «линзу», позволяющую видеть сквозь эти слои. Этот инструмент создан для того, чтобы поддерживать вашу продуктивность, повышать качество кода и помогать разбираться с реальными проблемами, при этом обеспечивая максимальный комфорт в ежедневной работе.
Бины, конфигурации и контексты — визуально расшифрованы.
Транзакции — легко отслеживаемы.
Свойства — раскрыты и привязаны к источникам.
Базы данных — автоматически определяются и доступны.
Вычислитель — контекстно-зависимый и интерактивный.
Отладчик не разрушает «магию» Spring — он помогает её понять и контролировать. Просто запустите приложение в режиме отладки и посмотрите, что действительно происходит внутри.
Попробуйте прямо сейчас! Установите Spring Debugger и сделайте внутреннюю работу Spring прозрачной. В документации вы найдёте всё необходимое для быстрого старта.
Удачной разработки!

Присоединяйтесь к русскоязычному сообществу разработчиков на Spring Boot в телеграм — Spring АйО, чтобы быть в курсе последних новостей из мира разработки на Spring Boot и всего, что с ним связано.