首先要在websocket 中设置关键,下图
@ServerEndpoint("/websocket/{sid}")
@Component
public class WebSocketServer {
private static final Logger log = LoggerFactory.getLogger(WebSocketServer.class);
private static int onlineCount = 0;
private static CopyOnWriteArraySet<WebSocketServer> webSocketSet = new CopyOnWriteArraySet<>();
private Session session;
private String sid = "";
private static ApplicationContext applicationContext;
private UserMapper userMapper;
private xxxxMapper xxxxeMapper;
private xxxxMapper xxxxMapper;
public static void setApplicationContext(ApplicationContext applicationContext) {
WebSocketServer.applicationContext = applicationContext;
}
修改Application 启动类
public class Application {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(Application.class, args);
WebSocketServer.setApplicationContext(context);
}
}
在websocket中修改链接时触发的方法
@OnOpen
public void onOpen(Session session, @PathParam("sid") String sid) {
log.info(sid+"链接成功");
this.session = session;
webSocketSet.add(this);
addOnlineCount();
log.info(sid+"链接成功"+":当前在线人数"+getOnlineCount());
this.sid = sid;
userMapper= applicationContext.getBean(UserMapper.class);
xxxxMapper = applicationContext.getBean(xxxxMapper.class);
xxxxMapper = applicationContext.getBean(xxxxMapper.class);
try {
sendMessage("连接成功");
} catch (IOException e) {
log.error("websocket IO异常");
}
}
具体流程:
项目启动时,将项目本身的所有bean对象赋值给websocket的 applicationcontext,在用户链接websocket的时候,调用链接时触发的方法,从applicationcontext中取到想要注册的bean的对象,赋值给定义的变量
大功告成!