当前位置: 首页 > article >正文

SpringBoot(十三)SpringBoot配置webSocket

在PHP版本的博客中,我使用PHP+swoole实现了webscoket即时聊天的功能。

在java版本的博客中,我也想使用webscoket来实现即时聊天的功能,下边是我实现过程的一个记录。

一:在pom.xml中添加记录

<!-- spring-websocket start -->
 <dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-websocket</artifactId>
 </dependency>
 <!-- spring-websocket end -->

二:在config目录添加WebSocketConfig.java文件

package com.springbootblog.config;
 
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.web.socket.config.annotation.EnableWebSocket;
 import org.springframework.web.socket.server.standard.ServerEndpointExporter;
 /**
  * @ Description: 开启WebSocket支持
  */
 @Configuration
 @EnableWebSocket
 public class WebSocketConfig
 {
     @Bean
     public ServerEndpointExporter serverEndpointExporter() {
         return new ServerEndpointExporter();
     }
 }

三:解决@ServerEndpoint注解中的@Autowired注解失效的问题

原理是WebSocket是线程安全的,有用户连接时就会创建一个新的端点实例,一个端WebSocket是多对象的,使用的spring却是单例模式。这两者刚好冲突。

所以在@ServerEndpoint注解下不能使用Autowired注解注入对象,那我在webscoket的控制器中也是需要操作redis以及操作数据库的,那我该如何去处理这个问题呢?

我百思不得其解。最后在百度上一位大神的指点下解决了这个问题。

使用从容器中取对象的工具类

在utils目录中添加SpringUtil.java文件

package com.springbootblog.utils;
 
 import org.springframework.beans.BeansException;
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.ApplicationContextAware;
 import org.springframework.stereotype.Component;
 
 @Component
 public class SpringUtil implements ApplicationContextAware
 {
     private static ApplicationContext applicationContext;
 
     @Override
     public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
         SpringUtil.applicationContext = applicationContext;
     }
 
     public ApplicationContext getApplicationContext(){
         return applicationContext;
     }
 
     public static Object getBean(String beanName){
         return applicationContext.getBean(beanName);
     }
 
     public static <T> T getBean(Class<T> clazz){
         try
         {
             return (T)applicationContext.getBean(clazz);
         }
         catch(Exception e)
         {
             return null;
         }
     }
 }

四:在SpringBoot中使用webscoket

package com.springbootblog.controller.fontend;
 
 import com.alibaba.fastjson.JSONObject;
 import com.springbootblog.dao.ChatRecordDao;
 import com.springbootblog.dao.UserDao;
 i

http://www.kler.cn/a/389976.html

相关文章:

  • 金价大跌,特朗普胜选或成导火索
  • react 中 FC 模块作用
  • https网站 请求http图片报错:net::ERR_SSL_PROTOCOL_ERROR
  • scala的练习题
  • 计算机新手练级攻略——如何搜索问题
  • 【Python特征工程系列】利用SHAP进行特征重要性分析-XGB模型为例(案例+源码)
  • 深度解读UI设计:从概念到实践一站式知晓
  • 从0开始机器学习--Day16--神经网络作业
  • uni-app文章列表制作⑧
  • 经典网络模型
  • 双指针(二)双指针到底是怎么个事
  • 图书管理系统(Java实现)
  • 低代码平台总览
  • C# 委托与匿名方法
  • css中的变量使用
  • kafka分区中的ISR、OSR、AR 是什么?
  • Flink使用SQL Gateway提交SQL Job到远程集群
  • 【单例模式】饿汉式与懒汉式以及线程安全
  • 大数据技术在金融风控中的应用
  • 我的生活记(dz-cn)
  • 【CentOS】中的Firewalld:全面介绍与实战应用(下)
  • 论文阅读分享:基于弱监督的病理图像腺体分割
  • 现代Web开发:WebSocket 实时通信详解
  • C语言命令行参数解析:getopt函数实战指南及高级应用解析
  • mysql5常用命令(一)
  • centos7 arm版本编译qt5.6.3详细说明