rock007 commented on issue #6239:
URL: https://github.com/apache/dubbo/issues/6239#issuecomment-1119696438
> 环境
>
> * Dubbo version: 2.6.8
> * Operating System version: Mac OS
> * Java version: 1.8
> * Springboot version: 2.2.5
>
> 问题描述
springboot集成dubbo,想要支持rest协议servlet类型server,但是bootstraplistener被加载了但是没有执行contextInitialized方法,导致真正服务暴露时报错
1、集成了dubbo-spring-boot-starter,另外加上了bootstraplistener和ServletRegistrationBean的自动装配类
@bean @ConditionalOnMissingBean( value = {BootstrapListener.class}) public
BootstrapListener bootstrapListener() { BootstrapListener bootstrapListener =
new BootstrapListener(); return bootstrapListener; }
>
> ```
> @Bean
> @ConditionalOnMissingBean( value = {DispatcherServlet.class})
> public ServletRegistrationBean
servletRegistrationBean(ConfigurableEnvironment environment) {
> ServletRegistrationBean servletRegistrationBean = new
ServletRegistrationBean(new DispatcherServlet());
> servletRegistrationBean.addUrlMappings("/*");
> servletRegistrationBean.setName("dispatcher");
> servletRegistrationBean.setLoadOnStartup(1);
> return servletRegistrationBean;
> }
> ```
>
> 2、war 3、启动类继承SpringBootServletInitializer @SpringBootApplication public
class ServletDemoProvider extends SpringBootServletInitializer { @OverRide
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder)
{ return builder.sources(ServletDemoProvider.class); } public static void
main(String[] args) throws Exception {
SpringApplication.run(ServletDemoProvider.class, args); } } 4、依赖
org.springframework.boot spring-boot-starter-web org.springframework.boot
spring-boot-starter-tomcat
>
> 5、错误栈:
>
> com.alibaba.dubbo.rpc.RpcException: No servlet context found. If you are
using server='servlet', make sure that you've configured
com.alibaba.dubbo.remoting.http.servlet.BootstrapListener in web.xml at
com.alibaba.dubbo.rpc.protocol.rest.DubboHttpServer.doStart(DubboHttpServer.java:62)
~[dubbo-rpc-rest-2.6.8.jar:2.6.8] at
com.alibaba.dubbo.rpc.protocol.rest.BaseRestServer.start(BaseRestServer.java:38)
~[dubbo-rpc-rest-2.6.8.jar:2.6.8] at
com.alibaba.dubbo.rpc.protocol.rest.RestProtocol.doExport(RestProtocol.java:90)
~[dubbo-rpc-rest-2.6.8.jar:2.6.8] at
com.alibaba.dubbo.rpc.protocol.AbstractProxyProtocol.export(AbstractProxyProtocol.java:71)
~[dubbo-2.6.8.jar:2.6.8] at
com.alibaba.dubbo.rpc.protocol.ProtocolListenerWrapper.export(ProtocolListenerWrapper.java:57)
~[dubbo-2.6.8.jar:2.6.8] at
com.alibaba.dubbo.qos.protocol.QosProtocolWrapper.export(QosProtocolWrapper.java:62)
~[dubbo-2.6.8.jar:2.6.8] at
com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper.export(ProtocolFilterWrapp
er.java:100) ~[dubbo-2.6.8.jar:2.6.8] at
com.alibaba.dubbo.rpc.Protocol$Adaptive.export(Protocol$Adaptive.java)
~[dubbo-2.6.8.jar:2.6.8] at
com.alibaba.dubbo.registry.integration.RegistryProtocol.doLocalExport(RegistryProtocol.java:172)
~[dubbo-2.6.8.jar:2.6.8] at
com.alibaba.dubbo.registry.integration.RegistryProtocol.export(RegistryProtocol.java:135)
~[dubbo-2.6.8.jar:2.6.8] at
com.alibaba.dubbo.rpc.protocol.ProtocolListenerWrapper.export(ProtocolListenerWrapper.java:55)
~[dubbo-2.6.8.jar:2.6.8] at
com.alibaba.dubbo.qos.protocol.QosProtocolWrapper.export(QosProtocolWrapper.java:60)
~[dubbo-2.6.8.jar:2.6.8] at
com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper.export(ProtocolFilterWrapper.java:98)
~[dubbo-2.6.8.jar:2.6.8] at
com.alibaba.dubbo.rpc.Protocol$Adaptive.export(Protocol$Adaptive.java)
~[dubbo-2.6.8.jar:2.6.8] at
com.alibaba.dubbo.config.ServiceConfig.doExportUrlsFor1Protocol(ServiceConfig.java:515)
~[dubbo-2.6.8.jar:2.6.8] at com.alibaba.dubbo.config.ServiceConfig.doExp
ortUrls(ServiceConfig.java:360) ~[dubbo-2.6.8.jar:2.6.8] at
com.alibaba.dubbo.config.ServiceConfig.doExport(ServiceConfig.java:319)
~[dubbo-2.6.8.jar:2.6.8] at
com.alibaba.dubbo.config.ServiceConfig.export(ServiceConfig.java:217)
~[dubbo-2.6.8.jar:2.6.8] at
com.alibaba.dubbo.config.spring.ServiceBean.export(ServiceBean.java:266)
~[dubbo-2.6.8.jar:2.6.8] at
com.alibaba.dubbo.config.spring.ServiceBean.onApplicationEvent(ServiceBean.java:106)
~[dubbo-2.6.8.jar:2.6.8] at
com.alibaba.dubbo.config.spring.ServiceBean.onApplicationEvent(ServiceBean.java:53)
~[dubbo-2.6.8.jar:2.6.8] at
org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
~[spring-context-5.2.4.RELEASE.jar:5.2.4.RELEASE] at
org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
~[spring-context-5.2.4.RELEASE.jar:5.2.4.RELEASE] at
org.springframework.context.event.SimpleApplication
EventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
~[spring-context-5.2.4.RELEASE.jar:5.2.4.RELEASE] at
org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:403)
~[spring-context-5.2.4.RELEASE.jar:5.2.4.RELEASE] at
org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:360)
~[spring-context-5.2.4.RELEASE.jar:5.2.4.RELEASE] at
org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:897)
~[spring-context-5.2.4.RELEASE.jar:5.2.4.RELEASE] at
org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.finishRefresh(ServletWebServerApplicationContext.java:162)
~[spring-boot-2.2.5.RELEASE.jar:2.2.5.RELEASE] at
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:553)
~[spring-context-5.2.4.RELEASE.jar:5.2.4.RELEASE] at org.springframework
.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141)
~[spring-boot-2.2.5.RELEASE.jar:2.2.5.RELEASE] at
org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747)
~[spring-boot-2.2.5.RELEASE.jar:2.2.5.RELEASE] at
org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
~[spring-boot-2.2.5.RELEASE.jar:2.2.5.RELEASE] at
org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
~[spring-boot-2.2.5.RELEASE.jar:2.2.5.RELEASE] at
org.springframework.boot.web.servlet.support.SpringBootServletInitializer.run(SpringBootServletInitializer.java:152)
[spring-boot-2.2.5.RELEASE.jar:2.2.5.RELEASE] at
org.springframework.boot.web.servlet.support.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:132)
[spring-boot-2.2.5.RELEASE.jar:2.2.5.RELEASE] at
org.springframework.boot.web.servlet.support.SpringBootServletInitializer.onStartup(Sp
ringBootServletInitializer.java:92)
[spring-boot-2.2.5.RELEASE.jar:2.2.5.RELEASE] at
org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:172)
[spring-web-5.2.4.RELEASE.jar:5.2.4.RELEASE] at
org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5136)
[catalina.jar:9.0.35] at
org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
[catalina.jar:9.0.35] at
org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:717)
[catalina.jar:9.0.35] at
org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:690)
[catalina.jar:9.0.35] at
org.apache.catalina.core.StandardHost.addChild(StandardHost.java:705)
[catalina.jar:9.0.35] at
org.apache.catalina.startup.HostConfig.manageApp(HostConfig.java:1727)
[catalina.jar:9.0.35] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method) ~[na:1.8.0_211] at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~
[na:1.8.0_211] at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
~[na:1.8.0_211] at java.lang.reflect.Method.invoke(Method.java:498)
~[na:1.8.0_211] at
org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:288)
[tomcat-coyote.jar:9.0.35] at
com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
[na:1.8.0_211] at
com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
[na:1.8.0_211] at
org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:456)
[catalina.jar:9.0.35] at
org.apache.catalina.mbeans.MBeanFactory.createStandardContext(MBeanFactory.java:405)
[catalina.jar:9.0.35] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native
Method) ~[na:1.8.0_211] at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
~[na:1.8.0_211] at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
~[na:1.8
.0_211] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_211] at
org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:288)
[tomcat-coyote.jar:9.0.35] at
com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:819)
[na:1.8.0_211] at
com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:801)
[na:1.8.0_211] at
com.sun.jmx.remote.security.MBeanServerAccessController.invoke(MBeanServerAccessController.java:468)
[na:1.8.0_211] at
javax.management.remote.rmi.RMIConnectionImpl.doOperation(RMIConnectionImpl.java:1468)
[na:1.8.0_211] at
javax.management.remote.rmi.RMIConnectionImpl.access$300(RMIConnectionImpl.java:76)
[na:1.8.0_211] at
javax.management.remote.rmi.RMIConnectionImpl$PrivilegedOperation.run(RMIConnectionImpl.java:1309)
[na:1.8.0_211] at java.security.AccessController.doPrivileged(Native Method)
[na:1.8.0_211] at
javax.management.remote.rmi.RMIConnectionImpl.doPrivilegedOperation(RMIConnectionI
mpl.java:1408) [na:1.8.0_211] at
javax.management.remote.rmi.RMIConnectionImpl.invoke(RMIConnectionImpl.java:829)
[na:1.8.0_211] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
~[na:1.8.0_211] at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
~[na:1.8.0_211] at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
~[na:1.8.0_211] at java.lang.reflect.Method.invoke(Method.java:498)
~[na:1.8.0_211] at
sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:357)
[na:1.8.0_211] at sun.rmi.transport.Transport$1.run(Transport.java:200)
[na:1.8.0_211] at sun.rmi.transport.Transport$1.run(Transport.java:197)
[na:1.8.0_211] at java.security.AccessController.doPrivileged(Native Method)
[na:1.8.0_211] at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
[na:1.8.0_211] at
sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:573)
[na:1.8.0_211] at sun.rmi.transport.tcp.TCPTransport$Conne
ctionHandler.run0(TCPTransport.java:834) [na:1.8.0_211] at
sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:688)
[na:1.8.0_211] at java.security.AccessController.doPrivileged(Native Method)
[na:1.8.0_211] at
sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:687)
[na:1.8.0_211] at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
~[na:1.8.0_211] at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
~[na:1.8.0_211] at java.lang.Thread.run(Thread.java:748) ~[na:1.8.0_211]
>
>
6、其他尝试:增加web.xml,指定bootstraplistener,确实可以加载并执行contextInitialized方法,但是不再执行@SpringBootApplication注解
这个问题没解决吧,我用最新的3.0.x版本也遇到这个错
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]