首页 > 解决方案 > 我的 Spring EventListener 是否可以等待 2 个事件进行?

问题描述

我有一个SpringBoot应用程序,必须连接到 websocket 服务器才能接收消息,然后我的应用程序使用内置FinitStateMachine(FSM)在内部处理这些消息。

我想要的是仅在以下情况下才开始对 websocket 服务器的 connect() 调用:

  1. 我的spring应用程序已经初始化
  2. 我的 FSM 构建器已完成 build() 调用

在构建 FSM 时,我使用 SpringApplicationEventPublisher发布自定义事件 ( )。FSMInitializedEvent并且启动与 websocket 服务器连接的代码等待这个自定义事件,但我希望我的 websocket 连接器代码也等待 Spring 的ApplicationReadyEvent. 有没有一种巧妙的方法来做到这一点?

从我的 FSM 的 build() 中:

applicationEventPublisher.publishEvent( new FSMInitializedEvent() );

在我的 WebSocket 连接器类中:

@EventListener(FSMInitializedEvent.class) <-- HERE i want to listen for this other event too before progressing - ApplicationReadyEvent.class
    public void init() {
// code to initiate the connection
}

我可以以编程方式处理这个问题,但要寻找一些准备好使用的优雅解决方案。另外,我的问题与这里的建议不同:在 Spring 中的多个事件上使用 @EventListener 注释,因为我希望我的侦听器在继续之前等待多个事件发生作为先决条件。

标签: springspring-boot

解决方案


推荐阅读