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]

Reply via email to