SpringBoot问题(Tomcat启动失败)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hr787753/article/details/78562136

异常信息如下:

    //这里
Caused by: org.apache.catalina.LifecycleException: A child container failed during start


at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:919) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:262) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) ~[tomcat-embed-core-8.5.6.jar:8.5.6]
... 24 common frames omitted 

因为SpringBoot内嵌了tomcat

 <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

一直报错 不清楚原因 最后才知道:

解决方案 1:

如果用的自己的Tomcat 部署项目 则要:

org.springframework.boot
spring-boot-starter-tomcat
provided //这就是让内嵌的tomcat失效

所以 启动会报tomcat 异常

而开发阶段我们用的是内嵌的 所以要 :

org.springframework.boot
spring-boot-starter-tomcat

解决方案 2:

其次 : 这是我这次出错的原因:
对springboot的依赖必须放在最前面!否则Springboot的内嵌tomcat无法启动!

必须放在 最前面 才可以 否则还会有一些什么jar冲突 之类的奇怪的异常

附带 SpringBoot war包运行的 方式 :
1.首先 让内嵌的 tomcat 失效
2.继承SpringBootServletInitializer

public class MyApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
    return builder.sources(MyApplication.class);
}

public static void main(String[] args) {
    SpringApplication.run(MyApplication.class, args);
}
}

ServletInitializer是Servlet初始化器,意思是当本应用作为tomcat的一个webapp时,就调用configure函数,这是tomcat容器调用的,这时整个应用就相当于Servlet。
当作为SpringApplication运行时,会执行main函数,但是不会执行上面的configure函数

建议 : 无论 jar 还是 war 都可以采用这种方式 !

展开阅读全文

没有更多推荐了,返回首页