Tomcat运行启动异常:A child container failed during start java.util.concurrent.ExecutionException

34 篇文章 0 订阅

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

启动Tomcat站点,有异常(无论是“重启eclipse”还是重启“电脑”,异常没有解决):

严重: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/NestedManagent]]
 at java.util.concurrent.FutureTask.report(FutureTask.java:122)
 at java.util.concurrent.FutureTask.get(FutureTask.java:192)
 at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
 at java.lang.Thread.run(Thread.java:748)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/NestedManagent]]
 at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
 ... 6 more
Caused by: java.lang.NoClassDefFoundError: org/springframework/web/context/request/async/CallableProcessingInterceptor
 at java.lang.Class.getDeclaredFields0(Native Method)
 at java.lang.Class.privateGetDeclaredFields(Class.java:2583)
 at org.apache.catalina.startup.WebAnnotationSet.loadFieldsAnnotation(WebAnnotationSet.java:256)
 at org.apache.catalina.startup.WebAnnotationSet.loadApplicationServletAnnotations(WebAnnotationSet.java:132)
 at org.apache.catalina.startup.WebAnnotationSet.loadApplicationAnnotations(WebAnnotationSet.java:65)
 at org.apache.catalina.startup.ContextConfig.applicationAnnotationsConfig(ContextConfig............

问题出现之后,我先是查看“端口8080”是否被进程占用,没有!!!

接着我去启动关闭Tomcat8试试,

Stop的按钮就会亮起,紧接着我点击Stop按钮;然后,我去重启eclipse的站点,还是报错,但是,我去查看端口8080占用情况,发现8080端口被“0端口”进程占用了,并且显示“TIME_WAIT”状态,

百度:TCP 连接的 TIME_WAIT 过多 导致 Tomcat 假死

(我顺便查看了有多少进程处于TIME_WAIT状态【在MySQL 调优基础(五) Linux网络中拷贝的命令】:

 

补充:端口8080正常被占用时,可以终止进程:(状态是 ESTABLISHED 已设定的、已建立的、被安排好的)

我百度了一下,我觉得(在Win7系统)答案并不是那样的:

MySQL 调优基础(五) Linux网络

然后我抛开“Time_Wait”的问题,根据“控制台弹出的异常”来查找答案:

发现:

启动tomcat时报错:java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException:A child container failed during start

我符合文章的第二种情况:

我的第一解决方案:

检查自己的“Dynamic Web Module”版本,一般是:3.0的Dynamic Web Module、1.8的jdk、8.0或8.5的Tomcat;

从图可知,我的Dynamic Web Module是2.3版本,与上图版本不一致,而jdk为1.8版本,搭配有问题【其实创建项目或者导入项目,都要检查版本的,eclipse有时莫名其妙,这次就是把我的Dynamic Web Module恢复eclipse的默认版本号2.3,选项最低为2.2版本号】,则Dynamic Web Module改成3.0,你若直接选择3.0,apply控件会变灰色,且有个框弹出并提示“Cannot change version of project facet Dynamic Web Module to 3.0”【椭圆框内,表示Dynamic Web Module3.0版本搭配1.6以上版本的jdk】

 改:(你找不到文件,可以使用‘文件管理器’的搜索框直接搜索,选择对应项目的‘.setting’文件夹下的两个org.eclipse.jdt.core.prefs.prefs、org.eclipse.wst.common.project.facet.core文件)

找到工作空间中的项目,打开项目找到.settings文件夹打开,编辑两个文件:

1.org.eclipse.jdt.core.prefs.prefs文件中的:

eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
org.eclipse.jdt.core.compiler.source=1.8

将1.8修改成对应的jdk版本

 

2.org.eclipse.wst.common.project.facet.core.xml文件中:

<?xml version="1.0" encoding="UTF-8"?>
<faceted-project>
<runtime name="Apache Tomcat v8.5"/>
<fixed facet="wst.jsdt.web"/>
<installed facet="wst.jsdt.web" version="1.0"/>
<installed facet="java" version="1.8"/>
<installed facet="jst.web" version="3.0"/>
</faceted-project>

将这个<installed facet="java" version="1.8"/>改成对应的java版本号,<installed facet="jst.web" version="3.1"/>改成对应的Dynamic Web module的版本号。

然后再打开project facet 查看是否修改。

改了之后,重启eclipse,运行站点,成功,但是我接下来没有用eclipse或者访问站点,隔个十几分钟,我访问相应页面,404!!!奇怪,成功运行了站点,怎么404,(非常肯定不是我的页面有问题,不是我的Controller访问方式有问题),接着我重新运行Tomcat站点,报错,重复‘一开始报的错’,然后我查看端口8080,又是Time_Wait状态!!!

【可能别人改完版本号,就完完全全好了,反正我的这个,No~】

第二解决方案:

上面那么解决方案,对我的问题,似乎是“治标不治本”,然后看了个论坛,很简单的回复,反正根据提问者的答案,我解决了!!!

tomcat启动错误 A child container failed during start :

确实“简单暴力,直接了当”!!!我右击Tomcat,选择delete,然后点击servers窗口里的带下划线的链接,new一个Tomcat——》Next或者直接Finish———》(我选择Next)在左边框里,选择对应项目——》add添加至右边的框里——》Finish——》根据你个人情况,选择调试还是直接运行,我个人喜欢选择调试,因为断点可以设置跳过【】!!!

 

 

补充:

(若选择Finish,选择Tomcat server右击——》选择Add and Remove 即可添加项目) 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yvette_QIU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值