Какое лучшее место в приложении SpringBoot для инициализации бизнес-логики? - PullRequest
1 голос
/ 04 ноября 2019

Я хочу инициализировать некоторую бизнес-логику (например, отправить несколько сообщений посреднику сообщений) в приложении Spring Boot после создания контекста и инициализации bean-компонентов (синглетонов) - какое для него «наиболее правильное» место?

С моей точки зрения, кандидаты:

  1. Реализация ApplicationListener + прослушивание ContextStartedEvent
  2. ApplicationRunner ИЛИ CommandLineRunner * run()метод
  3. @PostConstruct конкретного компонента (я не использую этот метод, но иногда встречался в коде коллег - потому что мне нужно убедиться, что все компоненты созданы, инициализированы, настроены, настроены и т. д. и я не хочу играть с порядком загрузки бинов)

Я понимаю, что в общем случае в веб-приложении MVC место для бизнес-логики - @Service, но мне нужно вызвать его сразу посленачало моего приложения, так каков наилучший способ сделать это?

1 Ответ

1 голос
/ 07 ноября 2019

Я бы пошел с @EventListener. Как вы сказали, есть разные способы достичь этого. Я выскажу свое мнение по вашим номерам

  1. ApplicationListener вызывается 3 раза. Не надо слушать это. Это может быть полезно, если вы делаете что-то похожее на tomcat.
  2. ApplicationRunner, CommandLineRunner вызывается после инициализации всех компонентов. Это может быть полезно.
  3. @ PostConstruct вы можете получить нулевые бины, если вы работаете с другими компонентами.

Я подготовил небольшой пример, чтобы использовать все это в одном приложении и распечатать некоторые журналы но я не мог их здесь выложить. Весенний бревно здесь выглядит безобразно. в любом случае, я предлагаю здесь , если у вас нет никакой зависимости от других компонентов, это выглядит лучше. если есть зависимости, вы можете использовать ApplicationListener , который был последним зарегистрированным в моем примере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...