Springboot+Websocket+外置Tomcat打包失败的解决方法
由于项目是以war包的形式放在Tomcat下启动的,在打包时移除了springboot的内置Tomcat,采用外置Tomcat打包的方式。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!--移除内置Tomcat-->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-comcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--打包时添加servlet依赖-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
打包的时候出现异常
Caused by: java.lang.IllegalStateException: javax.websocket.server.ServerContainer not available
错误原因
@ServerEndPoint注解依赖的jar包是从tomcat里获取的,我们把内置的tomcat移除了使用外置的,便会找不到其中相关的jar包。
解决方法
打包时把SpringBoot内置tomcat的jar给忽略掉。pom文件中增加如下配置:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
打包成功。websocket功能正常!
参考文章:https://blog.csdn.net/yaban8347/article/details/85147021