TGViewer
Spring АйО Spring АйО @spring_aio · 10.9K subscribers
Post #1126 6K
👀 Как понять, на чём тормозит запуск Spring Boot

Нередка ситуация, когда приложение стало запускаться заметно дольше, а в логах все ок. Может быть такое, что время уходит на создание бинов, загрузку данных или подключение к внешним сервисам.

Чтобы найти узкое место, Spring предоставляет интерфейс ApplicationStartup.

Есть три стула основные реализации:

– DefaultApplicationStartup. Используется по умолчанию и фактически ничего не записывает.

– BufferingApplicationStartup. Хранит события запуска в памяти. Удобен для локальной диагностики, тестов и просмотра через Actuator.

– FlightRecorderApplicationStartup. Передаёт данные в Java Flight Recorder для более глубокого профилирования.

Для быстрого анализа можно подключить буферизацию:


SpringApplication app = new SpringApplication(Application.class);

app.setApplicationStartup(
new BufferingApplicationStartup(2048)
);

app.run(args);


И открыть эндпоинт в настройках:


management.endpoints.web.exposure.include=startup


После запуска временная шкала будет доступна по адресу:


GET /actuator/startup


В ответе можно увидеть продолжительность отдельных этапов, их иерархию и имена создаваемых бинов:


{
"duration": "PT0.000754S",
"startupStep": {
"name": "spring.beans.instantiate",
"tags": [
{
"key": "beanName",
"value": "specialService"
}
]
}
}


У эндпоинта есть важная особенность:

– GET возвращает текущий снимок временной шкалы;
– POST возвращает снимок и очищает буфер.

Можно добавлять и собственные этапы. Например, отдельно измерять подключение к базе данных:


StartupStep step =
applicationStartup.start("app.database.connect");

try {
step.tag("database", "main");
connectToDatabase();
} finally {
step.end();
}


Такие этапы появятся рядом со стандартными событиями Spring. Это особенно полезно, когда во время инициализации выполняются миграции, прогреваются кэши, загружаются модели или создаются подключения к внешним системам.

Для продолжительного и более детального профилирования лучше использовать FlightRecorderApplicationStartup вместе с JFR и Java Mission Control.

Короче:
– нужен быстрый снапшот запуска - юзаем BufferingApplicationStartup;
– нужен глубокий анализ JVM - юзаем FlightRecorderApplicationStartup;
– нужна диагностика бизнес-инициализации, тогда добавляем собственные StartupStep.

Как-то так 🤓

🔗 Фул статья: https://habr.com/ru/companies/spring_aio/articles/1066976/
  • 🔥 54
  • 👍 19
  • ❤ 12
  • ⚡ 3
More from @spring_aio
  1. Sep 24, 2026🔥 Запись открытой лекции уже доступна Вчера прошла первая открытая лекция курса «Java в п…
  2. Sep 23, 2026🔥 УЖЕ СЕГОДНЯ В 20:00 — БЕСПЛАТНАЯ ЛЕКЦИЯ Друзья, начинаем через 15 минут! ❓ Тема: «Когда…
  3. Sep 22, 2026🆕 Вышел Opus 5.5. Уровень Fable за меньшие деньги Anthropic представила Claude Opus 5.5.…
  4. Sep 22, 2026🔥 УЖЕ ЗАВТРА — ОТКРЫТАЯ ЛЕКЦИЯ ДЛЯ ВСЕХ Завтра, 23 сентября встречаемся на первой ОТКРЫТО…
  5. Sep 22, 2026⚡️⚡️Joker 2026: что происходит с профессией разработчика Индустрия разработки проходит чер…
  6. Sep 21, 2026🧑‍💻 Трагедия версионирования ПО Мы привыкли читать версии по SemVer. Появились несовмест…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →