spring boot启动报Unable to start
EmbeddedWebApplicationContext问题解决方案
异常全文如下:
[java] view plain copy
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. at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:137) ~[spring-boot-1.4.4.RELEASE.jar:1.4.4.RELEASE] at
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:536)
~[spring-context-4.3.6.RELEASE.jar:4.3.6.RELEASE] at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) ~[spring-boot-1.4.4.RELEASE.jar:1.4.4.RELEASE] at
org.springframework.boot.SpringApplication.refresh(SpringApplication.java:762)
[spring-boot-1.4.4.RELEASE.jar:1.4.4.RELEASE] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:372)
[spring-boot-1.4.4.RELEASE.jar:1.4.4.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:316)
[spring-boot-1.4.4.RELEASE.jar:1.4.4.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1187)
[spring-boot-1.4.4.RELEASE.jar:1.4.4.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1176)
[spring-boot-1.4.4.RELEASE.jar:1.4.4.RELEASE] at com.travelsky.srd.tcldp.SrdTcldpApplication.main(SrdTcldpApplication.java:10) [classes/:na] Caused by:
org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean. at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.getEmbeddedServletContainerFactory(Embedd
edWebApplicationContext.java:189)
~[spring-boot-1.4.4.RELEASE.jar:1.4.4.RELEASE] at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:162)
~[spring-boot-1.4.4.RELEASE.jar:1.4.4.RELEASE] at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:134)
~[spring-boot-1.4.4.RELEASE.jar:1.4.4.RELEASE] ... 8 common frames omitted 大概意思就是不能启动containerFactory,初始化容器失败。
异常原因剖析:
经过一系列的debug,发现是由于使用的CXF多引了一个包导致的,该包如下:
[html] view plain copy <!-- Jetty is needed if you're are not
using the CXFServlet --> <dependency> <groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-transports-http-jetty</artifactId> <version>${cxf.version}</version>
</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可以正常启动!