SpringBoot项目java.lang.NoSuchMethodError: org.apache.tomcat.util.res.StringManager.getManager

通过Maven将SpringBoot打包,发布到Tomcat时,报如下错误:

严重: ContainerBase.addChild: start: 
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/springbootajax-0.0.1-SNAPSHOT]]
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
	at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
	at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
	at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
	at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1095)
	at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1930)
	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:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NoSuchMethodError: org.apache.tomcat.util.res.StringManager.getManager(Ljava/lang/Class;)Lorg/apache/tomcat/util/res/StringManager;
	at org.apache.tomcat.websocket.WsWebSocketContainer.<clinit>(WsWebSocketContainer.java:77)
	at org.apache.tomcat.websocket.server.WsSci.init(WsSci.java:131)
	at org.apache.tomcat.websocket.server.WsSci.onStartup(WsSci.java:47)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5506)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	... 10 more

在本机IDEA中,项目是可以跑起来的,没有问题,为什么发布到Tomcat就报错了呢,机器也没换,环境变量等等都一样,唯一不一样的就是Tomcat!!!考虑是否跟Tomcat版本不一样有关

一、首先我们查看Spring自带Tomcat的版本,可以通过以下两种方式查看:

1、通过页面查询

比如我们需要查Spring Boot 1.4.0-RELEASE的内嵌Tomcat版本, 可以打开链接:https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-tomcat/1.4.0.RELEASE,在该页面可以看到SpringBoot最新版本是2.1.7(红色标记部分),你要查询的版本对应的Tomcat(下图蓝色标记部分),1.4.0对应的Tomcat版本是8.5.4,黄色标记部分1.4.0是当前查询的SpringBoot版本号

2、通过IDEA工具查看

我的SpringBoot版本内置的Tomcat是8.5.4,而我将项目打包发布到Tomcat7,就出现了文章开头的报错。

二、指定SpringBoot内置的Tomcat版本

排除SpringBoot的Tomcat,指定Tomcat版本

有时候我们需要在特定情况下使用特定的Tomcat版本,这时候总不能因为Tomcat就改变SpringBoot的版本,所以可以采用排除SpringBoot中的Tomcat包,然后手动指定Tomcat的版本,当然还要引入Tomcat相关的包。

Maven的配置

在 pom.xml文件里面添加一个标签<properties>,添加期望的版本。

<tomcat.version>7.0.64</tomcat.version>(改为自己的Tomcat版本号)

添加JAR包

<dependency> 
   <groupId>org.apache.tomcat</groupId> 
   <artifactId>tomcat-juli</artifactId> 
   <version>${tomcat.version}</version> 
 </dependency>
<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-logging-juli</artifactId>
    <version>${tomcat.version}</version>
</dependency>

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值