tomcat启动异常:A child container failed during start

在JDK1.8、Tomcat8.0、Eclipse、SSM和Maven环境下,遇到启动异常'A child container failed during start'。错误源于Spring的IOC导致的空指针异常,原因是缺少某个类。分析日志后发现是由于移除了spring的日志依赖,但未正确配置slf4j和logback。解决方案是添加转换jar包,指导Spring使用logback日志。

JDK1.8+Tomcat8.0 +Eclipse+SSM+Maven

主要报错如下:

严重: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/atcrowdfunding02-admin-webui]]
...
aused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/atcrowdfunding02-admin-webui]]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:162)
	... 6 more
Caused by: java.lang.NoClassDefFoundError: Lorg/apache/commons/logging/Log;
	at java.lang.Class.getDeclaredFields0(Native Method)
...
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.Log
	at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1335)
	at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1163)
	... 20 more
	十二月 07, 2020 10:09:25 下午 org.apache.catalina.core.ContainerBase startInternal
严重: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
Caused by: org.apache.catalina.LifecycleException: A child container failed during start

由于是新手刚学,上来就复制报错日志进行百度,尝试了大家的方法发现没用(包括重启eclipse,重装tomcat,关闭8080端口netstat -ano | findstr 8080taskkill -pid 进程pid -f),就差重装eclipse了。

无意间看了下日志,才发现日志真是好东西,解决办法就在日志中呀。

分析日志:

  1. 主要原因是一个子容器启动失败,不用猜,肯定是spring的IOC 引起的

  2. 造成这个的原因是因为一个类没有找到引起的空指针异常:Caused by: java.lang.NoClassDefFoundError: Lorg/apache/commons/logging/Log,这个类不就是spring的依赖jar包嘛,这个包没有我是知道的,因为我的pom.xml有如下设置:

     <!-- Spring 依赖 -->
     <dependency>
     	<groupId>org.springframework</groupId>
     	<artifactId>spring-orm</artifactId>
     	<exclusions>
     		<!-- 不使用适用默认日志,使用slf4j+logback替换 -->
     		<exclusion>
     			<groupId>commons-logging</groupId>
     			<artifactId>commons-logging</artifactId>
     		</exclusion>
     	</exclusions>
     </dependency>
     
     <!-- 加入 slf4j+logback -->
     <dependency>
     	<groupId>org.slf4j</groupId>
     	<artifactId>slf4j-api</artifactId>
     </dependency>
     <dependency>
     	<groupId>ch.qos.logback</groupId>
     	<artifactId>logback-classic</artifactId>
     </dependency>
    
  3. 以上配置仅去掉了spring的依赖日志包commons-logging,加入了slf4j+logback所需要的jar包,而spring却不知道该怎么使用后者,所以需要加入如下转换jar包,来告诉spring怎么使用logback日志。

     <dependency>
     	<groupId>org.slf4j</groupId>
     	<artifactId>jcl-over-slf4j</artifactId>
     </dependency>
    

    新手这个框架搭了快一整天,感觉不是在搭框架,是在产BUG=-=-=-=-=-=反正日志是个好东西,以后要常看日志了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值