Как стать автором
Обновить

Комментарии 3

Теперь будет интересно посмотреть, как всё заработает вместе: и индекс аннотаций, и ленивая инициализация. И можно ли вообще?
Примечание переводчика: я запускал вот этот пример, прописав в зависимостях Spring Boot 2.2, и время запуска с ленивой инициализацией было 3 секунды, а без нее — 4. Думаю, что на более серьезных приложениях, существенного выигрыша во времени старта за счет использования ленивой инициализации мы не увидим.

В примере используется Hibernate в режиме ddl-auto=update. То есть, во время запуска приложения Hibernate подключается к базе, сканирует структуру таблиц, сканирует структуру Entities в приложении, находит разницу, вычисляет diff sql, обновляет структуру. После всего этого сколько запускается сам Spring, уже, в общем-то, не важно.


Hibernate вообще жадный до startup time, так что уж если хочется оптимизировать именно время запуска, то надо ставить и spring.data.jpa.repositories.bootstrap-mode=lazy (документация).

Спасибо за комментарий! Отключил вообще работу со схемой при старте (притворимся, что у нас уже все есть и используется не in-memory база):

spring.jpa.hibernate.ddl-auto = none
spring.data.jpa.repositories.bootstrap-mode = lazy

В итоге получилось в среднем 3.7 и 2.7 секунды при старте именно приложения. И в случае, когда используется ленивая инициализация бинов, в логах интересная, но ожидаемая картинка:

Started WebApplication in 2.707 seconds (JVM running for 5.198)
HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
HHH000400: Using dialect: org.hibernate.dialect.H2Dialect
HHH000490: Using JtaPlatform implementation: [o.h.e.t.j.p.internal.NoJtaPlatform]
Initialized JPA EntityManagerFactory for persistence unit 'default'
Зарегистрируйтесь на Хабре, чтобы оставить комментарий