Часто так бывает, что запуская 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).
Обзор в видео формате можете увидеть по ссылке.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ