#spring-boot #java-11
#spring-загрузка #java-11
Вопрос:
Я публикую событие с помощью spring ApplicationEventPublisher
Способ публикации и издатель
@Autowired
private ApplicationEventPublisher eventPublisher;
private void publishContributorUpdate(long contributorId, boolean isOwner){
var upe = new DeactivateContributorEvent(this);
upe.setContributorId(contributorId);
upe.setOwner(isOwner);
eventPublisher.publishEvent(upe);
}
Класс событий:
public class DeactivateContributorEvent extends ApplicationEvent
Слушатель здесь
@Component
public class ContributorDeactivateEventListener {
@Autowired
private ContributorDao contributorDao;
@EventListener
public void onContributorDeactivation(final DeactivateContributorEvent event) {
contributorDao.updateContributor(event.getContributorId(),event.isOwner(),false);
}
}
Итак, событие публикуется так, как я видел, но не читал. В чем может быть причина этого? Я использую spring-boot 2.1.3
Комментарии:
1. Все, что я вижу, выглядит нормально. Можете ли вы рассказать нам больше о том, как
eventPublisher
создается? Я бы также убедился, что вашContributorDeactivateEventListener
класс действительно сканируется и создается. Вы можете добавить к нему конструктор и поместить точку останова в этот конструктор или добавить вызов журнала или «printf», чтобы знать, что он просматривается Spring. (Кстати, я предполагаю, что когда вы говорите «не прочитано», вы имеете в виду, чтоonContributorDeactivation
это никогда не вызывается.)2. @steve это правильно. Метод onContributorDeactivation не вызывается
3. Тогда вы понимаете, что я предлагаю? Я хотел бы знать, создается ли ваш
ContributorDeactivateEventListener
объект. Я предполагаю, что это не так, потому что если бы это было так, то Spring должен был вызывать его. — возможно, этот файл / класс не сканируется Spring при запуске. Это лучшее объяснение, которое я могу придумать.4. Казалось бы, единственным другим объяснением было бы то, что
eventPublisher
это как-то неправильно. Но поскольку вы не получаете исключение NPE при его вызове, оно должно быть там, и я не могу придумать, как его настроить, чтобы не вызывать вашContributorDeactivateEventListener
класс. Вам пришлось бы сделать что-то странное при настройке, чтобы оно не работало. Этот механизм чертовски прост в Spring. — Итак, я предполагаю, что Spring не сканировал вашContributorDeactivateEventListener
класс на наличие аннотаций.5. Еще одна вещь. Я предполагаю, что вы искали в своих журналах ошибки, касающиеся всего этого. Это было бы здорово сделать, если вы этого не сделали, на случай, если в журналах есть ответ.