SpringBoot项目在eclipse启动成功,在idea中失败

原文:http://blog.csdn.net/xdd19910505/article/details/71601209


          最近用了SpringBoot的项目,使用了特定的方式来配置,让我们可以不用再看那么一坨xml真是神清气爽。之前的开发一直都是在eclipse上,因为习惯了IDEA,所以在idea上试了一下,结果出了点小问题。

             首先,springboot有两种启动方式,既可以直接通过main方法启动,也可以在tomcat里启动,在main方法里启动很简单,直接run启动类的main方法就可以了。在tomcat里启动是需要配置一下的,需要实现以下SpringBootServletInitializer

[java]  view plain  copy
  1. @EnableSwagger2  
  2. @SpringBootApplication  
  3. @EnableAutoConfiguration  
  4. public class ClaimApplication extends SpringBootServletInitializer {  
  5.   
  6.     @Override  
  7.     protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {  
  8.         return application.sources(ClaimApplication.class);  
  9.     }  
  10.   
  11. }  


        在eclipse中两种启动方式都可以,由于用idea打开了项目直接采用的是main方法的方式,导致了失败。其中过程中有几种报错是缺少一些jar包,所以当时认为是maven配置的问题,结果从maven配置入手重新下载了jar,结果无效。一直也很奇怪为什么同样的项目,在eclipse中可以,到了idea中就不行了。也许是idea配置的问题,因为eclipse中默认使用命名空间的方式,一个窗口一个命名空间,而idea中每个项目一个配置,后来在网上查了一些关于idea配置的问题,还是没有解决。因为启动程序的时候一直报的是因为找不到某个jar包,还有一个错误是这样的:      

[plain]  view plain  copy
  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:133)  
  3.     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:474)  
  4.     at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)  
  5.     at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:690)  
  6.     at org.springframework.boot.SpringApplication.run(SpringApplication.java:322)  
  7.     at org.springframework.boot.SpringApplication.run(SpringApplication.java:970)  
  8.     at org.springframework.boot.SpringApplication.run(SpringApplication.java:959)  
  9.     at com.mzjf.ClaimApplication.main(ClaimApplication.java:30)  
  10. Caused by: org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.  
  11.     at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.getEmbeddedServletContainerFactory(EmbeddedWebApplicationContext.java:185)  
  12.     at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:158)  
  13.     at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:130)  
  14.     ... 7 common frames omitted  

           查了查原因大概意思就是不能启动containerFactory,初始化容器失败。而网上说的是因为多引了CXF包,如下:

[html]  view plain  copy
  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. lt;/dependency>  

          引入这个包后,当springboot启动的时候,发现classpath下存在Jetty的jar包,于是推测我们要使用的容器不是默认的tomcat而是jetty,于是使用jetty容器,但是在初始化jetty容器的时候,却由于在springboot中没有加入jetty starter导致一些jetty容器依赖的某些jar包环境又不存在,最终导致初始化容器失败。但是我并没有引入这个jar包,但是仿佛找到的思路,也许我也是多引了某个jar,而且和启动有关。所以顺势找到了我多引用的一个jar包。

          

          

               当我把这个jar删掉的时候

[java]  view plain  copy
  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:133)  
  3.     at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:474)  
  4.     at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)  
  5.     at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:690)  
  6.     at org.springframework.boot.SpringApplication.run(SpringApplication.java:322)  
  7.     at org.springframework.boot.SpringApplication.run(SpringApplication.java:970)  
  8.     at org.springframework.boot.SpringApplication.run(SpringApplication.java:959)  
  9.     at com.mzjf.ClaimApplication.main(ClaimApplication.java:30)  
  10.     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  
  11.     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)  
  12.     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)  
  13.     at java.lang.reflect.Method.invoke(Method.java:498)  
  14.     at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)  
  15. Caused by: org.springframework.context.ApplicationContextException: Unable to start EmbeddedWebApplicationContext due to missing EmbeddedServletContainerFactory bean.  
  16.     at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.getEmbeddedServletContainerFactory(EmbeddedWebApplicationContext.java:185)  
  17.     at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.createEmbeddedServletContainer(EmbeddedWebApplicationContext.java:158)  
  18.     at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.onRefresh(EmbeddedWebApplicationContext.java:130)  
  19.     ... 12 common frames omitted  

          

             然后加入jar

            

            使用main方法启动成功。

 

             至此问题解决,同时采用tomcat部署时应该采用上面的spring-boot-starter-tomcat,异常问题解决了,springboot两种方式都可以正常启动。


总结:

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

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

3、Springboot默认集成的是Tomcat容易,如果想换成Jetty容器,首先则需要把默认的Tomcat容器去除,然后引入Jetty依赖


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值