我需要Websockets在我的应用程序中进行实时更新。所以我找到了这个例子,并在这里一步一步地做了。我浏览了本教程,最后在启动应用程序时出现此异常:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name
'org.springframework.web.socket.server.support.DefaultHandshakeHandler#0':Bean 实例化失败;嵌套异常是org.springframework.beans.BeanInstanceiationException: 不能实例化 Bean 类[org.springframework.web.socket.server.support.DefaultHandshakeHandler]:构造函数抛出异常;嵌套异常是java.lang.IllegalStateException: 没有合适的默认值找到请求升级策略
我搜索了很多,但没有找到解决方案。
我希望有人能帮助我,提前谢谢。
最好的问候,帕特里克
我设法通过添加以下 maven 依赖项来解决此问题:
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-websocket</artifactId>
<version>7.0.52</version>
</dependency>
正如 Craig Otis 所指出的,如果你打算部署到 Tomcat,你应该使用 <scope>test</scope>
来确保你不会在构建工件中包含依赖项。
我在使用嵌入式 Jetty 在 IDE 中运行 websocket 时遇到了这个问题,在将以下依赖项添加到 pom 后修复了此问题.xml
<dependency>
<groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>websocket-client</artifactId>
<version>9.3.4.RC0</version>
<!--<scope>test</scope>-->
</dependency>
<dependency>
<groupId>org.eclipse.jetty.websocket</groupId>
<artifactId>websocket-server</artifactId>
<version>9.3.4.RC0</version>
<!--<scope>test</scope>-->
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-client</artifactId>
<version>9.3.4.RC0</version>
<!--<scope>test</scope>-->
</dependency>
我浪费了很多时间来寻找解决方案,我发现Spring websocket只能运行在Tomcat 7.0.47+,Jetty 9.1+,GlassFish 4.1+,WebLogic 12.1.3+和Undertow 1.0+(和WildFly 8.0+)上,根据这里显示的spring文档。http://docs.spring.io/spring/docs/current/spring-framework-reference/html/websocket.html,因此请尝试更新应用服务器
您使用的 Tomcat 版本太旧。
升级雄猫。 http://tomcat.apache.org/download-70.cgi
我也遇到了这个问题,通过一个链接查看这是否有帮助 https://github.com/rstoyanchev/spring-websocket-portfolio/issues/21
异常意味着 DefaultHandshakeHandler 找不到支持的服务器(例如 Tomcat 7 和 8、Jetty 9)。请参阅此处的 javadoc。
此外,
如果您使用的是 gradle,您应该在 build.gradle
中添加以下依赖项
compile 'org.projectreactor:reactor-spring:1.0.1.RELEASE'