Выполнить код, когда приложение Spring успешно развернуто

77
7

Есть ли способ в приложении Spring узнать, когда завершена инициализация? Мне нужно запустить код после развертывания моего приложения, и я ищу что-то вроде встроенных событий ServletContextListener или Spring.

спросил(а) 2021-01-25T12:37:45+03:00 4 месяца, 4 недели назад
1
Решение
116

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

Вы можете использовать BeanPostProcessor. Он имеет два метода, которые рассматриваются как обратные вызовы, и я считаю, что postProcessAfterInitialization - это тот, который вас интересует. Вещь с BeanPostProcessor заключается в том, что они запускаются для каждого компонента в ApplicationContext, поэтому вы захотите убедиться только для боба (-ов), который вы заинтересованы в применении этой обработки. Чтобы использовать BeanPostProcessor, вы просто определяете его как часть вашего ApplicationContext. Внедрите интерфейс InitializingBean. Он определяет единственный метод afterPropertiesSet который вызывается ApplicationContext. Это имеет преимущество перед номером 1, поскольку оно может быть применено к компоненту по принципу компонента (не относится ко всем компонентам в ApplicationContext). Используйте аннотацию @PostContstuct для метода. Эта аннотация сообщает ApplicationContext что этот метод следует запускать после инициализации компонента. Это действует аналогично номеру 2, поскольку оно выполняется на компоненте по компоненту bean.

Дополнительная информация о жизненном цикле обратного вызова ApplicationContext может быть прочитана в этом месте.

ответил(а) 2021-01-25T12:37:45+03:00 4 месяца, 4 недели назад
78

Вы можете использовать

    Аннотации @PostConstruct или ApplicationListener, которые получают вызванный ContextStartedEvent (но будьте осторожны, если у вас есть типичный веб - приложение, которое вы имеете два контекста и так два ContextStartedEvent s.

ответил(а) 2021-01-25T12:37:45+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема