添加websocket依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
springboot要添加两个配置,正常情况下一个配置也可以,但是使用 @Autowired注入的service会为null
@Configuration
@ConditionalOnWebApplication
public class WebSocketConfig {
//使用boot内置tomcat时需要注入此bean
@Bean
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter();
}
@Bean
public CustomSpringConfigurator customSpringConfigurator() {
return new CustomSpringConfigurator(); // This is just to get context
}
}
public class CustomSpringConfigurator extends ServerEndpointConfig.Configurator implements ApplicationContextAware {
/**
* Spring application context.
*/
private static volatile BeanFactory context;
@Override
public <T> T getEndpointInstance(Class<T> clazz) throws InstantiationException {
return context.getBean(clazz);
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
CustomSpringConfigurator.context = applicationContext;
}
}
最后在WebSocketController添加两个注解,ServerEndpoint的value是WebSocket的连接地址,和前端写的地址要对应好。
@ServerEndpoint(value = "/socket/{userId}/{sessionId}", configurator = CustomSpringConfigurator.class)
@Component
Contrller和jsp就不写了,可以自行百度
如果WebSocket报404错误,可以关闭aop试试,因为aop拦截了WebSocket花了我不少时间,坑啊。