Как прогреть кэши в Spring Boot?
Как прогреть кэши в Spring Boot? Или вообще как выполнить что-то на старте Spring Boot приложения? Обычно такие операции делают в @PostConstruct или подписываются на событие ApplicationReadyEvent. Но у этих вариантов есть заметный минус. Если “прогрев” находится в @PostConstruct, как отключить его в тестах? Можно добавить флаг, сделать сабкласс и подменить его в тестовой конфигурации, но это не всегда помогает и часто выглядит как костыль. Более элегантный способ “прогреть кэши” Смотри: SpringApplication.run(...) возвращает полностью готовый контекст. Можно достать из него компонент и вызвать нужный метод “прогрева”. Код выглядит как на картинке: Плюс: В интеграционных тестах с @SpringBootTest метод main не запускается. Соответственно, код внутри него не выполняется. Никаких костылей вокруг @PostConstruct, все чисто и красиво. Когда “прогрев” все-таки нужен в тестах, добавляем параметр use main method: @SpringBootTest(useMainMethod = SpringBootTest.UseMainMethod.ALWAYS)