遇到一个问题:
在使用springboot整合websocket过程中报错
org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘serverEndpointExporter’
…
java.lang.IllegalStateException: javax.websocket.server.ServerContainer not available
很奇怪的问题,于是
javax.servlet.ServletContainerInitializer
org.springframework.boot.web.embedded.tomcat.TomcatStarter#onStartup
@Override
public void onStartup(Set<Class<?>> classes, ServletContext servletContext) throws ServletException {
try {
for (ServletContextInitializer initializer : this.initializers) {
initializer.onStartup(servletContext);
}
}
catch (Exception ex) {
this.startUpException = ex;
// Prevent Tomcat from logging and re-throwing when we know we can
// deal with it in the main thread, but log for information here.
if (logger.isErrorEnabled()) {
logger.error("Error starting Tomcat context. Exception: " + ex.getClass().getName() + ". Message: "
+ ex.getMessage());
}
}
}
发现断点居然进不来,后来发现原来是启动了jetty服务器
通过gradle dependencies 查看依赖树(maven是mvn dependency:tree)
发现原来是引入的wiremock依赖引入了jetty相关的jar包,从而触发了spring boot的自动装配,启动了jetty
(wiremock之前引入是为了做测试,忘记注释掉了)
关于spring boot中websocket endpoint是如何初始化及启动的,参考:spring boot中websocket endpoint是如何初始化及启动的