Tomcat发布war报错:Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardCo

4 篇文章 1 订阅

问题

  • java8的代码,之前一直用IDEA开发,在IDEA上自带的Tomcat运行没有问题,用我本机的Tomcat运行也没有问题,但是部署到远程服务器就一致报错如下

Tomcat报错如下:

Tomcat error:05-Sep-2023 17:14:54.249 SEVERE [localhost-startStop-8] org.apache.catalina.core.ContainerBase.addChildInternal ContainerBase.addChild: start: 
        org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/three2]]
                at org.apache.catalina.util.LifecycleBase.handleSubClassException(LifecycleBase.java:440)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:198)
                at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:753)
                at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:727)
                at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:695)
                at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1016)
                at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1903)
                at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
                at java.util.concurrent.FutureTask.run(FutureTask.java:266)
                at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
                at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
                at java.lang.Thread.run(Thread.java:750)
        Caused by: org.springframework.jmx.export.UnableToRegisterMBeanException: Unable to register MBean [org.springframework.cloud.context.environment.EnvironmentManager@77298a91] with key 'environmentManager'; nested exception is javax.management.InstanceAlreadyExistsException: org.springframework.cloud.context.environment:name=environmentManager,type=EnvironmentManager
                at org.springframework.jmx.export.MBeanExporter.registerBeanNameOrInstance(MBeanExporter.java:628)
                at org.springframework.jmx.export.MBeanExporter.registerBeans(MBeanExporter.java:550)
                at org.springframework.jmx.export.MBeanExporter.afterSingletonsInstantiated(MBeanExporter.java:432)
                at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:781)
                at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867)
                at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543)
                at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
                at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693)
                at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360)
                at org.springframework.boot.SpringApplication.run(SpringApplication.java:303)
                at org.springframework.boot.web.support.SpringBootServletInitializer.run(SpringBootServletInitializer.java:154)
                at org.springframework.boot.web.support.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:134)
                at org.springframework.boot.web.support.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:87)
                at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:169)
                at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5221)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
                ... 10 more
        Caused by: javax.management.InstanceAlreadyExistsException: org.springframework.cloud.context.environment:name=environmentManager,type=EnvironmentManager
                at com.sun.jmx.mbeanserver.Repository.addMBean(Repository.java:437)
                at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerWithRepository(DefaultMBeanServerInterceptor.java:1898)
                at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerDynamicMBean(DefaultMBeanServerInterceptor.java:966)
                at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerObject(DefaultMBeanServerInterceptor.java:900)
                at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.registerMBean(DefaultMBeanServerInterceptor.java:324)
                at com.sun.jmx.mbeanserver.JmxMBeanServer.registerMBean(JmxMBeanServer.java:522)
                at org.springframework.jmx.support.MBeanRegistrationSupport.doRegister(MBeanRegistrationSupport.java:195)
                at org.springframework.jmx.export.MBeanExporter.registerBeanInstance(MBeanExporter.java:683)
                at org.springframework.jmx.export.MBeanExporter.registerBeanNameOrInstance(MBeanExporter.java:618)
                ... 25 more

排查问题

  • 通过现象(IDEA和本地windows中的Tomcat都可以运行),可以肯定不是代码的问题,那么就一定是Tomcat的问题,
  • 定位到是Tomcat的问题,那么Tomcat的问题出在哪呢,一定是配置的问题
  • 根据报错原因: Caused by: org.springframework.jmx.export.UnableToRegisterMBeanException: Unable to register MBean [org.springframework.cloud.context.environment.EnvironmentManager@77298a91] with key 'environmentManager';
    • 一开始看这个报错还以为是MBean对象注册失败,这显示应该是个代码的问题,但是之前已经排除了是代码的问题,所有一定是Tomcat加载时候出了问题
    • 定位到是Tomcat加载时出的问题,那么大概率是Tomcat加载时jar依赖的问题、
    • 由于是“类加载设置、扫描类”的问题,那么负责配置Tomcat的配置文件是catalina.properties,至此,问题已经定位清楚

解决过程

  1. 修改配置类:打开catalina.properties,修改扫描配置,tomcat.util.scan.StandardJarScanFilter.jarsToSkip代表的是在启动Tomcat需要跳过检查的jar包,在这里配置\,*,
  2. 关闭Tomcat
  3. 删除webapps文件夹中相关解压的缓存
  4. 启动Tomcat
  5. 查看Tomcat的启动日志,发现不报错了,通过url访问后端接口,可以访问了,问题解决
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

努力改掉拖延症的小白

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

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

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

打赏作者

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

抵扣说明:

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

余额充值