SpringBoot引入WebSocket依赖报ServerContainer no avaliable

这篇具有很好参考价值的文章主要介绍了SpringBoot引入WebSocket依赖报ServerContainer no avaliable。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、场景

需要使用@ServerEndpoint来建立websocket链接。引入依赖。

<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-websocket</artifactId>  
</dependency>

配置Websocket

@Configuration  
@EnableWebSocket  
public class WebSocketConfig {  
  
    @Bean  
    public ServerEndpointExporter serverEndpointExporter() {  
        return new ServerEndpointExporter();  
    }  
  
}

启动报错

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'serverEndpointExporter' defined in class path resource [com/southsmart/server/algorithm/config/WebSocketConfig.class]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: javax.websocket.server.ServerContainer not available

二、排查思路

  1. 报的错误是创建ServerEndpointExporterBean失败,原因是ServerContainer不可用,那么我们就去看到ServerContainer在ServerEndpointExporter中是怎么注入的。

看到注入位置是ServerEndpointExporter第92行

@Override  
protected void initServletContext(ServletContext servletContext) {  
   if (this.serverContainer == null) {  
      this.serverContainer =  
            (ServerContainer) servletContext.getAttribute("javax.websocket.server.ServerContainer");  
   }  
}

debug发现

(ServerContainer) servletContext.getAttribute(“javax.websocket.server.ServerContainer”);

返回null

  1. 为什么servletContext会返回null,定位到 ServerContainer 类,发现他是一个接口,那必定注入的时候是有相应的实现类,点击查看实现,居然有三个实现类,那就可以推断是依赖冲突导致不知道要注入哪个实现,最后获取Bean的时候返回了null。

一、场景

需要使用@ServerEndpoint来建立websocket链接。引入依赖。

<dependency>  
    <groupId>org.springframework.boot</groupId>  
    <artifactId>spring-boot-starter-websocket</artifactId>  
</dependency>

配置Websocket

@Configuration  
@EnableWebSocket  
public class WebSocketConfig {  
  
    @Bean  
    public ServerEndpointExporter serverEndpointExporter() {  
        return new ServerEndpointExporter();  
    }  
  
}

启动报错

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'serverEndpointExporter' defined in class path resource [com/southsmart/server/algorithm/config/WebSocketConfig.class]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: javax.websocket.server.ServerContainer not available

二、排查思路

  1. 报的错误是创建ServerEndpointExporterBean失败,原因是ServerContainer不可用,那么我们就去看到ServerContainer在ServerEndpointExporter中是怎么注入的。

看到注入位置是ServerEndpointExporter第92行

@Override  
protected void initServletContext(ServletContext servletContext) {  
   if (this.serverContainer == null) {  
      this.serverContainer =  
            (ServerContainer) servletContext.getAttribute("javax.websocket.server.ServerContainer");  
   }  
}

debug发现

(ServerContainer) servletContext.getAttribute(“javax.websocket.server.ServerContainer”);

返回null

  1. 为什么servletContext会返回null,定位到 ServerContainer 类,发现他是一个接口,那必定注入的时候是有相应的实现类,点击查看实现,居然有三个实现类,那就可以推断是依赖冲突导致不知道要注入哪个实现,最后获取Bean的时候返回了null。

SpringBoot引入WebSocket依赖报ServerContainer no avaliable,javaWeb,spring boot,websocket,java文章来源地址https://www.toymoban.com/news/detail-628134.html

  1. 利用Maven Helper插件通过jar包找到相应的依赖,并排除,只留下一个即可,我这里选择留下的是WsServerContainer。
    SpringBoot引入WebSocket依赖报ServerContainer no avaliable,javaWeb,spring boot,websocket,java
    SpringBoot引入WebSocket依赖报ServerContainer no avaliable,javaWeb,spring boot,websocket,java
  2. 重新启动,发现问题已经解决。

到了这里,关于SpringBoot引入WebSocket依赖报ServerContainer no avaliable的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决:javax.websocket.server.ServerContainer not available 报错问题

    在 SpringBoot 项目中集成了 WebSocket,当进行 SpringBoot 单元测试时报错: 报错的方法是: 报错的方法的主要作用是: 用于扫描带有 @ServerEndpoint 的注解成为 websocket ,该方法是 服务器端点出口,当进行 SpringBoot 单元测试时,并没有启动服务器,所以当加载到这个bean时会报错。

    2024年02月16日
    浏览(27)
  • SpringBoot有的时候引入依赖为什么不用加版本号

    有的小伙伴做项目时候,引入新的包时候,会有疑问,为什么有些依赖需要加版本号,有些依赖不需要加版本号?不加版本号的依赖,版本号都写在哪里了呢? 内置的依赖可以不加版本号 这是因为SpringBoot内置了很多依赖,引入这些内置的依赖时不需要加版本号,相反,如果

    2024年01月19日
    浏览(50)
  • 将springboot项目生成可依赖的jar,并引入到项目中

    SpringBoot项目默认打包的是可运行jar包,也可以打包成不可运行的jar包。 能打成可运行的jar包是因为,Spring Boot 项目引入了 spring-boot-maven-plugin 依赖包。 spring-boot-maven-plugin具有repackage 功能,就是在打包的时候,多做一点额外的事情: (1)首先 mvn package 命令 对项目进行打包,

    2024年02月17日
    浏览(35)
  • 查看某个三方依赖jar包是在哪个pom引入的(springboot+idea)

    项目springboot1升级2版本,日志框架使用的是log4j,升级到springboot2版本某些依赖引入了logback依赖包,然后项目启动报错: 查看这个 SLF4JLoggerContextFactory 这个类是在哪个jar包下 使用idea的maven依赖图查看功能寻找是哪个pom引入的 然后使用ctrl F搜索,然后双击打开这个jar 可以看出

    2024年03月25日
    浏览(58)
  • Springboot 项目中引入WebSocket后,单元测试出现错误,前端开发揭秘

    java.lang.IllegalStateException: Failed to load ApplicationContext at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:125) at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:108) at org.springframework.test.context.w

    2024年04月27日
    浏览(25)
  • springboot项目中引入本地依赖jar包,并打包到lib文件夹中

    描述:下载了第三方相关jar包后,项目中引入本地jar,测试环境正常,打包线上报错提示为找到该jar 原因:应该在/WEB-INF/lib/xxx.jar,被打包到此目录:/WEB-INF/classes/lib/xxx.jar 引入jar包后,在此pom.xml文件中里面添加依赖坐标,即添加中内容 在pom的 build/ build标签中还需进行如下修

    2024年02月07日
    浏览(40)
  • springboot项目中引入本地依赖jar包,如何打包到lib文件夹中

    前言: 工作中,碰到过springboot框架构建的java web项目,需要集成第三方推送功能,于是使用到了小米推送服务,下载了相关jar包。项目中引入本地jar,问题不大,编写完代码后,通过测试类测试,也没问题。然后就准备打包部署到开发服上。由于项目是通过tomcat部署的,所以

    2024年02月11日
    浏览(44)
  • 【异常】IDEA中执行单元测试后提示IllegalStateException: javax.websocket.server.ServerContainer not available

    在SpringBoot项目中集成了WebSocket,在进行单元测试的时候,出现了以下错误: 代码中使用了POM文件spring-boot-starter-websocket,用于统计实时人数 单元测试类的原注解是这样的: 经查阅资料,得知SpringBootTest在启动的时候不会启动服务器,所以WebSocket自然会报错 这个时候需要添加

    2024年02月04日
    浏览(29)
  • Maven 引入外部依赖

    如果我们需要引入第三方库文件到项目,该怎么操作呢? pom.xml 的 dependencies 列表列出了我们的项目需要构建的所有外部依赖项。 要添加依赖项,我们一般是先在 src 文件夹下添加 lib 文件夹,然后将你工程需要的 jar 文件复制到 lib 文件夹下。我们使用的是 ldapjdk.jar ,它是为

    2024年02月07日
    浏览(37)
  • 【FAQ】NPM 引入本地依赖包

    npm 本地依赖包分为 本地文件夹类型 本地文件夹类型的依赖包适用于在编写插件的 dome 示例项目时使用,在无需将包发布到 npm 仓库的情况,做到实时编译,修改 本地压缩包类型 压缩包类型的依赖包适用于没有外网和没有 npm 私有仓库(verdaccio) 的情况下安装依赖 npm 安装文

    2024年01月23日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包