SpringBoot问题(Tomcat启动失败)

异常信息如下:

    //这里
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 都可以采用这种方式 !

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值