You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot WebSocket部署至Dailyrazor的Tomcat 8.5服务器时出现No suitable default RequestUpgradeStrategy found错误求助

Spring Boot WebSocket部署至Dailyrazor的Tomcat 8.5服务器时出现No suitable default RequestUpgradeStrategy found错误求助

我刚接触Spring Boot和WebSocket,现在正在开发一个需要WebSocket功能的聊天应用。在本地运行完全没问题,但部署到Dailyrazor上的Tomcat 8.5服务器时,就出现了No suitable default RequestUpgradeStrategy found的错误。

我已经尝试过的操作:

  • 检查了Spring Boot版本,确保和Tomcat 8.5兼容
  • 确认WebSocket版本也兼容
  • 补充说明:在添加WebSocket功能之前,我的程序在Dailyrazor上运行得很正常

我的build.gradle配置:

buildscript {

repositories {

maven {

url "https://plugins.gradle.org/m2/"

}

}

dependencies {

classpath "org.springframework.boot:spring-boot-gradle-plugin:2.2.2.RELEASE"

classpath "io.spring.gradle:dependency-management-plugin:1.0.8.RELEASE"

}

}

plugins {

id 'war'

}

group 'com.teamtreehouse'

version '1.0-SNAPSHOT'

allprojects  {

apply plugin: 'maven'

apply plugin: "io.spring.dependency-management"

group = 'com.wnp'

version = '6.5.0-SNAPSHOT'

}

apply plugin: 'java'

apply plugin: "org.springframework.boot"

sourceCompatibility = 1.8

targetCompatibility = 1.8

repositories {

mavenCentral()

}

dependencies {

// https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-websocket

//    compile 'org.projectreactor:reactor-spring:1.0.1.release'

implementation 'io.spring.dependency-management:io.spring.dependency-management.gradle.plugin:1.1.0'

compile 'org.springframework.boot:spring-boot-starter-web'

compile 'org.springframework.boot:spring-boot-starter-data-jpa'

compile 'org.springframework.boot:spring-boot-starter-thymeleaf'

compile 'org.springframework.boot:spring-boot-starter-security'

//// https://mvnrepository.com/artifact/org.springframework/spring-web

//    implementation 'org.springframework:spring-web:6.0.0'

implementation 'org.springframework.boot:spring-boot-starter-mail:2.2.2.RELEASE'

compile group: 'org.apache.maven.plugins', name: 'maven-surefire-plugin', version: '2.22.2'

implementation 'org.ocpsoft.prettytime:prettytime:3.2.7.Final'

//    compile 'org.springframework:spring-orm'

//    compile group: 'org.hibernate', name: 'hibernate-core'

// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-tomcat

//    providedRuntime group: 'org.springframework.boot', name: 'spring-boot-starter-tomcat', version: '2.7.5'

// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-tomcat

providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat:2.2.2.RELEASE'

compile 'org.eclipse.mylyn.github:org.eclipse.egit.github.core:2.1.5'

testCompile group: 'junit', name: 'junit', version: '4.11'

compile 'org.hashids:hashids:1.0.1'

// https://mvnrepository.com/artifact/mysql/mysql-connector-java

implementation 'mysql:mysql-connector-java:8.0.33'

implementation 'org.springframework.boot:spring-boot-starter-websocket'

testImplementation group: 'junit', name: 'junit', version: '4.11'

implementation group: 'com.amazonaws', name: 'aws-java-sdk-s3', version: '1.12.131'

// https://mvnrepository.com/artifact/org.projectlombok/lombok

compileOnly 'org.projectlombok:lombok:1.18.28'

testImplementation 'software.amazon.awssdk:s3:2.17.102'

runtimeOnly 'software.amazon.awssdk:bom:2.17.102'

}

WebSocket配置类:

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {

@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/chat");
registry.addEndpoint("/chat").withSockJS();
}

@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.setApplicationDestinationPrefixes("/app");
registry.enableSimpleBroker("/topic");
}
}

错误日志:

INFO next-step-co.com-startStop-2 org.apache.catalina.core.ContainerBase.[Catalina].[next-step-co.com].[/] - 2 Spring WebApplicationInitializers detected on classpath

INFO mysql-cj-abandoned-connection-cleanup org.apache.catalina.loader.WebappClassLoader - Illegal access: this web application instance has been stopped already.  Could not load .  The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.

INFO next-step-co.com-startStop-2 org.apache.catalina.core.ContainerBase.[Catalina].[next-step-co.com].[/] - Initializing Spring embedded WebApplicationContext

ERROR next-step-co.com-startStop-2 org.apache.catalina.core.ContainerBase - ContainerBase.addChild: start:
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[next-step-co.com].StandardContext[]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:724)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:700)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:714)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:919)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1704)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'stompWebSocketHandlerMapping' defined in class path resource [org/springframework/web/socket/config/annotation/DelegatingWebSocketMessageBrokerConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.web.servlet.HandlerMapping]: Factory method 'stompWebSocketHandlerMapping' threw exception; nested exception is java.lang.IllegalStateException: No suitable default RequestUpgradeStrategy found
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:656)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:484)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1338)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1177)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:557)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)
at org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$878/444480024.getObject(Unknown Source)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:879)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:878)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.run(SpringBootServletInitializer.java:152)
at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:132)
at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:92)
at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:172)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5164)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 10 more

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.web.servlet.HandlerMapping]: Factory method 'stompWebSocketHandlerMapping' threw exception; nested exception is java.lang.IllegalStateException: No suitable default RequestUpgradeStrategy found
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:651)
... 33 more

Caused by: java.lang.IllegalStateException: No suitable default RequestUpgradeStrategy found
at org.springframework.web.socket.server.support.AbstractHandshakeHandler.initRequestUpgradeStrategy(AbstractHandshakeHandler.java:153)
at org.springframework.web.socket.server.support.AbstractHandshakeHandler.<init>(AbstractHandshakeHandler.java:119)
at org.springframework.web.socket.server.support.DefaultHandshakeHandler.<init>(DefaultHandshakeHandler.java:35)
at org.springframework.web.socket.server.support.WebSocketHttpRequestHandler.<init>(WebSocketHttpRequestHandler.java:74)
at org.springframework.web.socket.config.annotation.WebMvcStompWebSocketEndpointRegistration.getMappings(WebMvcStompWebSocketEndpointRegistration.java:142)
at org.springframework.web.socket.config.annotation.WebMvcStompEndpointRegistry.getHandlerMapping(WebMvcStompEndpointRegistry.java:155)
at org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurationSupport.stompWebSocketHandlerMapping(WebSocketMessageBrokerConfigurationSupport.java:82)
at org.springframework.web.socket.config.annotation.DelegatingWebSocketMessageBrokerConfiguration$$EnhancerBySpringCGLIB$$89bc0503.CGLIB$stompWebSocketHandlerMapping$11(<generated>)
at org.springframework.web.socket.config.annotation.DelegatingWebSocketMessageBrokerConfiguration$$EnhancerBySpringCGLIB$$89bc0503$$FastClassBySpringCGLIB$$d170f115.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244)
at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:363)
at org.springframework.web.socket.config.annotation.DelegatingWebSocketMessageBrokerConfiguration$$EnhancerBySpringCGLIB$$89bc0503.stompWebSocketHandlerMapping(<generated>)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
... 34 more

ERROR next-step-co.com-startStop-2 org.apache.catalina.startup.HostConfig - Error deploying web application archive /home/nextste2/tomcat/webapps/next-step-co.com/ROOT.war
java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[next-step-co.com].StandardContext[]]
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:727)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:700)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:714)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:919)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1704)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)

备注:内容来源于stack exchange,提问作者Abdullah Howard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 13:43:07