Ускоряем время запуска Spring Boot: ограничиваем сканирование

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для того, чтобы ускорить инициализацию Spring Boot, включите отложенную инициализацию, установив значение spring.main.lazy-initialization=true. Избавьтесь от неиспользуемых автоконфигураций, добавив их в исключения через параметр spring.autoconfigure.exclude. А для ускорения загрузки используйте ключи JVM -Xverify:none или -noverify, которые позволяют пропустить процесс верификации классов.

Java
Скопировать код
spring:
  main:
    lazy-initialization: true  // Лень – мать прогресса?
  autoconfigure:
    exclude:  // Оставьте в проекте только то, что действительно нужно!
      – org.springframework.boot.autoconfigure... // Нет места лишнему!

Применяя отложенную инициализацию, отсекая лишние автоконфигурации и корректируя настройки JVM, вы существенно сократите время старта приложения.

Кинга Идем в IT: пошаговый план для смены профессии

Экономим время и ресурсы

Оптимизация classpath

Сократите classpath до основного набора классов, чтобы ускорить установку приложения. Воспользуйтесь spring-boot-thin-launcher для создания оптимизированного и легковесного jar файла.

Мониторинг времени загрузки

Для контроля и корректировки времени запуска приложения используйте инструмент JMH (Java Microbenchmark Harness). Он поможет выявить и устранить узкие места.

Оптимизация конфигурационных файлов

Aктуализируйте настройки spring.config.location для эффективной работы с файлами свойств и создайте профили для определённых типов свойств, чтобы ускорить процесс загрузки.

Анализ инициализации бинов

Для ретроспективного анализа времени инициализации бинов можно использовать LazyInitBeanFactoryPostProcessor. Это будет особенно полезно в старых версиях Spring.

Настройка системы логирования

Настройка различных уровней логирования в разных пакетах позволяет сфокусироваться на ключевых моментах в процессе отладки и сократить время запуска.

Визуализация

Запуск вашего приложения на Spring Boot можно представить в виде поезда:

Markdown
Скопировать код
🚂 = Приложение Spring Boot
🛤️ = Время запуска
📦 = Автоконфигурации

Если сократить количество автоконфигураций, воспользоваться отложенной загрузкой и корректно распределить конфигурационные файлы между различными профилями, то время запуска приложения существенно сократится:

diff
Скопировать код
До оптимизации:
🚂📦📦📦📦📦📦🛤️🛤️🛤️🛤️🛤️🛤️ -> Все тащим за собой, едем неспешно...

После оптимизации:
🚂📦🛤️🛤️🛤️ -> Экспресс-старт отсчитывает обратный отчет: 3...2...1... 🚀

Вывод:

Markdown
Скопировать код
🚂 + 🛤️ = 🏁 Ваше приложение должно стартовать так же быстро, как гончий автомобиль 🏎️!

Дополнительные способы оптимизации и ускорения

Повышение скорости разрешения имен хостов

Оптимизация процесса работы с DNS сервисами позволит облегчить старт и увеличить производительность, как если бы вы ехали по свободной трассе.

Возможности, предоставляемые Spring Boot версии 2.4.0

Spring Boot 2.4.0 предлагает новые методы анализа и оптимизации процесса загрузки.

Подбор JSON-парсера

Рассмотрите возможность использования Gson вместо Jackson для потенциального ускорения обработки JSON.

Ускорение сканирования classpath

Применение spring-context-indexer позволит сканировать classpath быстрее и ускорить инициализацию бинов.

Безопасная работа с JMX

Если JMX не используется, для улучшения производительности его стоит отключить, установив spring.jmx.enabled=false.

Полезные материалы

  1. Production-ready Features – Справочник по оптимизации Spring Boot.
  2. GitHub – Spring Boot Thin Launcher for Memory Efficiency – Инструмент для снижения ресурсоёмкости и увеличения скорости загрузки приложений.
  3. Java HotSpot VM Options – Руководство по настройке JVM.
  4. The Definitive Guide to Spring Boot Lazy Initialization – Гайд по реализации ленивой инициализации в Spring Boot.
  5. Stack Overflow: Tips to speed up Spring Boot apps – Советы по ускорению Spring Boot от опытных разработчиков.
Свежие материалы