SpringBoot打包成war之后,运行项目后websocket会报错并且崩溃,这个问题困扰了我一整天,今天终于找到原因了
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'serverEndpointExporter' defined in class path resource [org/xx/config/WebSocketConfig.class]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: javax.websocket.server.ServerContainer not available
解决方案
方法一,在配置类中把serverEndpointExporter方法注释掉,或者直接删掉
@Configuration
public class WebSocketConfig {
/**
* 注入ServerEndpointExporter,
* 这个bean会自动注册使用了@ServerEndpoint注解声明的Websocket endpoint
*/
// @Bean
// public ServerEndpointExporter serverEndpointExporter() {
// return new ServerEndpointExporter();
// }
}
方法二,为了方便进行项目维护,建议使用@Profile
注解,完美解决,省去了开发和发布时候注释代码的操作
@Configuration
public class WebSocketConfig {
/**
* 注入ServerEndpointExporter,
* 这个bean会自动注册使用了@ServerEndpoint注解声明的Websocket endpoint
*/
@Profile({"dev", "test"})
@Bean
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter();
}
}
@Profile
注解的参数为字符数组,当项目环境Active profiles为dev
或者test
时,@bean serverEndpointExporter会正常装配,当Active profiles是其他比如prod的时候,serverEndpointExporter会被忽略不进行装配
为明天加油