JavaRush /Java блог /Random /Способы ускорения запуска Spring Boot приложении
Bakytzhan
5 уровень
Алматы

Способы ускорения запуска Spring Boot приложении

Статья из группы Random
Часто так бывает, что запуская Spring Boot приложение, можно идти пить кофе. А если у нас еще и микросервисная архитектура, то запуск несколько сервисов, отнимает большую часть времени. Первый способ, это использовать ленивую инициализацию бинов (bean). При запуске Spring Boot приложения, наверное могли заметить в логах, как инициализируются много классов. Чтобы это заработало, нужно в параметрах приложения (application.properties, yml) - добавить строчку:

spring.main.lazy-initialization=true
Плюс данного подхода, в цикле разработки, когда пишем код - запускаем - тестируем, можем получить хороший прирост по времени. Минус данного подхода, при использовании на продуктиве, то самый первый запуск кода, будет выполняться дольше чем остальные. И можно на первом запросе, словить много ошибок, которых смогли бы словить, во время запуска приложения. Второй способ, это проанализировать, что запускается в вашем Spring Boot приложении, так как из-за авто конфигурации, могут запускаться много лишних классов. Для этого, лишь добавляем:

 logging.level.org.springframework.boot.autoconfigure=DEBUG
в настройки приложения, и при старте приложения, в логах можем увидеть всю необходимую информацию, а затем используя аннотацию

EnableAutoConfiguration(exclude)
исключить из запуска авто конфигурации. Есть способы еще по тюнингу JVM, по включению/выключению параметров компиляции C1/C2 - но данные методы мне не нравятся, и не рекомендую их остальным. Так как, если что-то будет работать не так, то это последнее место, куда я буду смотреть и дебажить, чтобы понять, что проблема лежит здесь. Последний способ, это познакомится с проектом Spring Native. Который приносит проект GraalVM в экосистему Spring. Только на данный момент, стабильного релиза нет, и все еще находится на стадии эксперимента. Потому, не рекомендую использовать на продуктиве данное решение. Но, познакомиться с данным решением, и следить за ним - крайне рекомендую. Так как за данным решением/подходом тренд, и все чаще будет это встречать в будущем. А если хочется использовать нативные сборки в экосистеме Java, то предлагаю использовать Micronaut (команда Grails, можно писать на Java, Kotlin, Groovy) и Quarkus. Тем самым, вы получите полноценный рабочий фреймворк, для создания нативных образов, которые хорошо будут работать в контейниризированной среде (ну и в Kubernetes). Обзор в видео формате можете увидеть по ссылке.
Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Павел Уровень 11
9 февраля 2022
Грех жаловаться на скорость запуска под Spring boot, это вы ещё под WebSphere не запускались. В плюсик к Quarcus что у него есть dev режим, тоесть он делает фоновую компиляцию в режиме реального времени