При каких обстоятельствах ApplicationEventPublisher.publishEvent не срабатывает? - PullRequest
0 голосов
/ 01 мая 2020

Я пытаюсь создать DiscoveryClient, и я хочу, чтобы он вызывал событие при изменении маршрутов. Я использую

publisher.publishEvent(new InstanceRegisteredEvent<>(this, "serviceName"));

Однако событие на самом деле не запускается, даже если это тот же объект. Я подозреваю, что это потому, что это другой поток, но @Scheduled также запускается из другого потока, и он срабатывает успешно.

1 Ответ

0 голосов
/ 01 мая 2020

Я столкнулся с тем обстоятельством, что я использовал ApplicationEventPublisher, предоставленный на этапе BootstrapAutoConfiguration в приложении. Поскольку я использовал это, события, которые я публикую sh, не распространяются должным образом.

Чтобы обойти это, мне нужно было обязательно заменить ApplicationEventPublisher, который был вставлен во время bootstrap, на что-то после добавления другой автоконфигурации, выполняемой на этапе автоконфигурации, а не на этапе Bootstrap.

Я добавил (но это необязательно) ApplicationEventPublisherAware в класс в моем случае DockerSwarmDiscovery

@Configuration
@ConditionalOnBean(DockerSwarmDiscovery.class)
@Slf4j
public class DockerSwarmDiscoveryWatchAutoConfiguration {

    @Autowired
    private DockerSwarmDiscovery dockerSwarmDiscovery;

    @Autowired
    private ApplicationEventPublisher applicationEventPublisher;

    @PostConstruct
    public void injectPublisher() {
        dockerSwarmDiscovery.setApplicationEventPublisher(applicationEventPublisher);
    }

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