Запуск метода при старте Spring приложения: решение без @Scheduled

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для запуска метода после внедрения зависимостей применяется аннотация @PostConstruct. Она не предоставляет доступ к аргументам командной строки.

Java
Скопировать код
@PostConstruct
public void onStartup() {
    // Здесь следует разместить четкую и понятную логику
}

Если возникает потребность в доступе к аргументам командной строки, применяется CommandLineRunner.

Java
Скопировать код
@Override
public void run(String...args) {
    // Пример работы с аргументами командной строки
}

Оба подхода наглядно вписываются в жизненный цикл Spring и выбираются в соответствии с потребностью в командных аргументах.

Кинга Идем в IT: пошаговый план для смены профессии

Расшифровка процесса запуска Spring

Во время инициализации Spring предоставляет возможность запустить собственные методы. Разберем некоторые подходы к «привлечению внимания» Spring.

Шаг @PostConstruct

Аннотация @PostConstruct выступает как первоначальный шаг танца. Относится к простым в использовании, выполняется единожды после создания бина и внедрения зависимостей.

Движение InitializingBean

Если требуется более детальное управление, реализуйте InitializingBean с методом afterPropertiesSet, который вызывается после установки всех свойств бина.

Ритм init()

Для определения собственного метода инициализации можно создать метод init() и обозначить его в аннотации @Bean(initMethod="init").

Вихрь Lifecycle

Интерфейс Lifecycle требует реализации методов start() и stop(), это даст возможность управлять бином в соответствии с состоянием контекста Spring.

Шимми событий приложения

Примените ApplicationListener<ContextRefreshedEvent> или аннотацию @EventListener для запуска методов после полной инициализации контекста.

Самба ApplicationReadyEvent

Событие ApplicationReadyEvent совместно с @EventListener позволит методам начать работу, когда приложение полностью готово к функционированию.

Визуализация

Представьте, что Spring — это театр, а методы, которые нужно вызвать, — это актёры.

Markdown
Скопировать код
Сцена 1: Инициализация (🎭 + 🪑 = 🎭)
# Актёр (🎭) занимает своё место (🪑) ОДИН РАЗ.
Markdown
Скопировать код
Сцена 2: Расцвет (🌞)
# Постановка протекает по сценарию, автономно, без дополнительных корректировок.

Ваши методы вступают в игру уже на начальной стадии.

Выбор подходящих «танцевальных движений»

Выбирайте стратегию инициализации исходя из требований вашего приложения.

Стартуем с Two-Step

@PostConstruct подходит для базовой инициализации;

Танго с жизненным циклом бина

InitializingBean и определение собственных init-методов обеспечивают полный контроль и подходят для сложных настроек.

Битва танцев со стартовыми событиями

Использование событий контекста Spring требует понимания его ритмов.

Ваши первые шаги в Джайве

Прямой вызов метода бина — это непредсказуемый и яркий танец.

Гарантия однократного представления

Убедитесь, что методы вызываются только один раз.

Путешествуйте налегке в своем танце

Сократите использование «реквизита» и сложных настроек для методов стартовой инициализации.

Танцуйте в ритме Spring

Ваше приложение – это театр, где бины выступают в роли актёров, требующих тщательно продуманной репетиции (инициализации).

Совершенствование движений

Методы жизненного цикла Spring обучают бины правильной инициализации.

Грандиозное представление

Баланс между автоматизацией и явной конфигурацией гарантирует успех вашего приложения.

За кулисами

Весь путь бина от момента создания до полной готовности — это важный аспект функционирования приложения на Spring.

Неожиданные повороты сюжета (Исключения)

Внеочередные ситуации (исключения) учтены и тщательно обработаны в процессе инициализации.

Полезные материалы

  1. CommandLineRunner (Spring Boot 3.2.2 API) — официальная документация Spring Boot.
  2. ApplicationRunner (Spring Boot 3.2.2 API) — информация о работе кода после старта.
  3. SpringApplication (Spring Boot 3.2.2 API) — основной класс для работы в Spring Boot.
  4. SpringBootApplication (Spring Boot 3.2.2 API) — аннотация для запуска Spring Boot приложения.
  5. Spring Boot – Loading Initial Data – Stack Overflow — обсуждение начальной загрузки данных в Spring Boot.
  6. Spring Boot Application Events Explained — руководство по работе со событиями в Spring Boot.