Иногда на проде случаются сбои при старте из-за тяжёлых или нестабильных бинов. Это может быть внешняя интеграция, длительная инициализация или просто нестабильный ресурс. В таких случаях поможет ленивая инициализация.
📌 Как включить ленивую инициализацию глобально:
@SpringBootApplication
public class App {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(App.class);
app.setLazyInitialization(true);
app.run(args);
}
}
📌 Или в
application.yml:
spring:
main:
lazy-initialization: true
💡 Бины будут создаваться только при первом запросе к ним. Это уменьшает время старта и помогает "пережить" временные проблемы.
⚠️ Минусы:
* Ошибки сдвигаются с этапа запуска на runtime.
* Если бин важен для старта (например, контроллер или Scheduler), его лучше инициализировать сразу.
📌 Тонкая настройка:
Хотите ленивую инициализацию только для части приложения?
@Lazy
@Component
public class HeavyService {
// ...
}
💡 Работает и с
@Bean, @Service, @Repository.📈 Используйте в микросервисах с большим числом зависимостей или при миграции на Spring Boot 3+, где время старта стало критичным (например, в serverless-архитектуре).
👉 @java_geek