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

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.mrgr.cn/news/70771.html

相关文章:

  • 用K8S部署nginx负载均衡
  • C++ 语言实现读写.csv文件.xls文件
  • 【计网不挂科】计算机网络期末考试——【选择题&填空题&判断题&简述题】试卷(1)
  • 无线局域网四种类型
  • conda 设置代理
  • 微服务容器化部署实践(FontConfiguration.getVersion)
  • SIwave:在 SIwave 中释放计算频率扫描的强大功能
  • SpringBoot(八)使用AES库对字符串进行加密解密
  • 使用 ConstraintLayout 实现灵活的相对定位与偏移布局
  • 【Linux 31】网络层协议 - IP
  • CAN总线数据帧格式详细介绍
  • Java中的类和对象:深入理解面向对象编程的核心
  • Vagrant 没了 VirtualBox 的话可以配 Qemu
  • 第四十四章 Vue之actions/mapActions/getters
  • 51c大模型~合集23
  • Hadoop(YARN)
  • 科研绘图系列:R语言多图形组合(barplot boxplot stacked plots)
  • CAN总线物理层特性详细分析
  • flutter调试
  • Ansys EMC Plus:以 Touchstone 格式计算和导出 S 参数
  • Python爬虫
  • 双指针(二)双指针到底是怎么个事
  • POP3、SMTP、FTP、HTTP、BGP、DNS、DHCP、RIP、Ping、Traceroute
  • 十、有C/C++/Java基础,迅速掌握Python,B站黑马2022版教程笔记(自用)
  • 高字节,低字节,大端序,小端序
  • 学习python的第九天之数据类型——tuple元组