分享

spring boot启动报Unable to start EmbeddedWebApplicationContext问题解决方案

 WindySky 2017-10-25 发布于广东

异常全文如下:

  1. org.springframework.context.ApplicationContextException: Unable to start embedded container; nested exception is org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.  
  2.     at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:137) ~[spring-boot-1.4.4.RELEASE.jar:1.4.4.RELEASE]  
  3.     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:536) ~[spring-context-4.3.6.RELEASE.jar:4.3.6.RELEASE]  
  4.     at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) ~[spring-boot-1.4.4.RELEASE.jar:1.4.4.RELEASE]  
  5.     at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:762) [spring-boot-1.4.4.RELEASE.jar:1.4.4.RELEASE]  
  6.     at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:372) [spring-boot-1.4.4.RELEASE.jar:1.4.4.RELEASE]  
  7.     at org.springframework.boot.SpringApplication.run(SpringApplication.java:316) [spring-boot-1.4.4.RELEASE.jar:1.4.4.RELEASE]  
  8.     at org.springframework.boot.SpringApplication.run(SpringApplication.java:1187) [spring-boot-1.4.4.RELEASE.jar:1.4.4.RELEASE]  
  9.     at org.springframework.boot.SpringApplication.run(SpringApplication.java:1176) [spring-boot-1.4.4.RELEASE.jar:1.4.4.RELEASE]  
  10.     at com.travelsky.srd.tcldp.SrdTcldpApplication.main(SrdTcldpApplication.java:10) [classes/:na]  
  11. Caused by: org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.  
  12.     at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.getEmbeddedServletContainerFactory(EmbeddedWebApplicationContext.java:189) ~[spring-boot-1.4.4.RELEASE.jar:1.4.4.RELEASE]  
  13.     at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:162) ~[spring-boot-1.4.4.RELEASE.jar:1.4.4.RELEASE]  
  14.     at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:134) ~[spring-boot-1.4.4.RELEASE.jar:1.4.4.RELEASE]  
  15.     ... 8 common frames omitted  
大概意思就是不能启动containerFactory,初始化容器失败。

异常原因剖析:

经过一系列的debug,发现是由于使用的CXF多引了一个包导致的,该包如下:

  1. <!-- Jetty is needed if you're are not using the CXFServlet -->  
  2.         <dependency>  
  3.             <groupId>org.apache.cxf</groupId>  
  4.             <artifactId>cxf-rt-transports-http-jetty</artifactId>  
  5.             <version>${cxf.version}</version>  
  6.         </dependency>  
引入这个包后,当spring boot启动的时候,发现classpath下存在Jetty的jar包,于是推测我们要使用的容器不是默认的tomcat而是jetty,于是使用jetty容器,但是在初始化jetty容器的时候,却由于在spring boot中没有加入jetty starter导致一些jetty容器依赖的某些jar包环境又不存在,最终导致初始化容器失败。

异常解决方法:

1、删除导致spring boot可能认为不使用默认容器的jar包,上例中可以删除依赖的jetty的jar包

2、在spring boot中加入spring-boot-starter-jetty,明确我们想使用什么容器,不要让spring boot引起误会和错误的可能猜测

通过上面的几个步骤,异常问题解决了,spring boot可以正常启动!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多