java - Spring Boot 端点 + webSocket

标签 java spring spring-boot websocket

我正在开发一个应用程序,该应用程序具有对实体进行 CRUD 操作的常规端点(我正在注入(inject) Controller ),应用程序的流程应该使实体的属性不断变化,因此我需要通知前端这些更改实时。这就是我注册 Web Socket 的原因

@Configuration 
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {

@Override
public void registerWebSocketHandlers(WebSocketHandlerRegistry webSocketHandlerRegistry) {
    webSocketHandlerRegistry.addHandler(new PositionHandler(),"/positions").setAllowedOrigins("*");
}

class PositionHandler extends TextWebSocketHandler {

    private List<WebSocketSession> sessions = new CopyOnWriteArrayList<>();

    @Override
    public void afterConnectionEstablished(WebSocketSession session) throws Exception {
       sessions.add(session);
       while(session.isOpen()){
          HERE I WOULD LIKE TO ACCESS METHOD FOR  CONTROLLER
       }


        super.afterConnectionEstablished(session);
    }

    @Override
    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {
       for(WebSocketSession s: sessions){
            session.sendMessage(message);
        }

        super.handleTextMessage(session, message);
    }
}

}

在 afterConnectionEstablished 中,我想使用注入(inject)到普通 @RestController 类中的 Controller 中的方法。有可能做到吗?如果不是我应该如何重构。 PS WebSocket 有效。

最佳答案

您可以在处理程序中进行依赖项注入(inject)(@Autowired 注释)并从其余 Controller 调用方法。但你为什么要这样做? Controller 内部有业务逻辑吗?

关于java - Spring Boot 端点 + webSocket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61295035/

相关文章:

java - Vaadin 和 Spring,通过 LDAP 针对 Active Directory 进行身份验证

java - Spring Boot 没有静态资源映射

java - @ElementCollection 至少包含一个元素,最多包含 N 个元素

java - 无法解析字符串值 'jwt.secret' 中的占位符 "${jwt.secret}"

java - Spring Boot 无法检测我输入的值

java - Spring Boot Kafka中多个消费者如何监听多个主题?

java - 打开旅行计划实时测试

java - 避免与 Java 中的静态类重复代码

java - 使用基于多个分隔符和不同空行长度的分割

java - 这个变量如何在 cpp 中用作 int 和数组?