springboot整合websocket部署报错:Error creating bean with name 'serverEndpointExporter',org.springframework.web.socket.server.standard找不到?
第一步
加入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
第二步
@Configuration
public class WebSocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter();
}
}
第三步
**/
@Component
@ServerEndpoint(value = “/ws/csrpmed/websocket/{userId}”)
public class MyWebSocket extends BaseController {
private static final Logger logger = LoggerFactory.getLogger(MyWebSocket.class);
// 以用户名为key,Session为值保存
public static final Map<String, Session> clients = new ConcurrentHashMap<>();
private Gson gson = new Gson();
/**
* 收到客户端消息后调用的方法
* @param message 消息内容
* @param session
*/
@OnMessage
public void onMessage(String message, Session session) {
}
/**
* 连接发生错误时的调用方法
* @param session
* @param error
*/
@OnError
public void onError(Session session, Throwable error) {
try {
//发送对象
String from = session.getPathParameters().get(Util.USERNAME);
logger.error("---------------------与{}的连接发生错误---------------------",from);
} catch (Exception e) {
//logger.error("聊天异常!", e);
//重试连接会一直刷屏
}
}
/**
* 建立连接
*/
@OnOpen
public void onOpen(@PathParam(Util.USERID) String userId, Session session) {
try {
logger.info("用户聊天连接入参 {}",userId);
//将用户添加到容器
clients.put(userId, session);
addOnlineCount(); //在线数加1
logger.info("用户聊天连接成功用户id为 {}",userId);
} catch (Exception e) {
//logger.error("聊天连接异常", e);
//重试连接会一直刷屏
}
}
/**
* 连接关闭
*/
@OnClose
public void onClose(Session session) {
try {
logger.info("用户关闭连接入参 {}", session);
String username = session.getPathParameters().get(Util.USERNAME);
// 移除容器中存储的用户数据以及发消息通知其他用户
if (clients.get(username) != null) {
clients.remove(username);
subOnlineCount(); //在线数减1
}
logger.info("用户 {} 退出聊天剩余连接 :{}", username, clients);
} catch (Exception e) {
logger.error("用户退出聊天异常", e);
}
}
// 推送消息给某个人
public static void sendMessageTo(String message, String to) {
Session session = clients.get(to);
if (session != null) {
session.getAsyncRemote().sendText(message);
}
}
// 推送消息给某个人,非异步
public static Session sendMessageToSynchronized(String message, String to) {
Session session = clients.get(to);
if (session != null) {
try {
session.getBasicRemote().sendText(message,true);
logger.info("同步发送消息成功");
} catch (IOException e) {
e.printStackTrace();
logger.error("同步发送消息失败"+e);
}
}
return session;
}
public static synchronized void addOnlineCount() {
MyWebSocket.onlineCount++;
}
public static synchronized void subOnlineCount() {
MyWebSocket.onlineCount--;
}
}
按着这样来依然会出现这个问题
第一步中WebSocketConfig这个类找不到?
org.springframework.web.socket.server.standard
开始在网上搜了…
1注释第一步中的类.
2去掉第三步的@Component
但是运行了,依然报错…
开始自己以为是,jar包没下载全,然后清空了maven本地仓库,重新下载,还是如此…
开始以为是自己代码写的问题,请求小组大佬在他电脑上可以运行…
我猜测是环境问题…没错就是这样.
首先重启idea…不行
重启电脑…不行…
重新拉代码…不行
最后抱着侥幸的态度换了个maven(idea自带的)… 结果奇迹般的运行了…
然后我又换回自己曾经那个maven… 结果可以…
好吧,总算是圆满解决了,亲测有效果,有知道原理大佬,可以在评论区留言,谢谢各位!!!