You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tomcat 7部署WAR包报错:Spring Boot应用与Tomcat端口冲突

解决Spring Boot WAR包部署到Tomcat 7时的端口冲突问题

嘿,这个问题我之前踩过坑!核心原因很简单:你把**外部Tomcat的运行端口(localhost:5000)和Spring Boot应用内嵌Tomcat的端口(同样设为5000)**设成同一个了,导致端口占用冲突,Tomcat没法正常部署你的WAR包。

为什么会出现这个问题?

当你把Spring Boot打包成WAR包部署到外部Tomcat时,正常情况下应用的内嵌Tomcat会被禁用,转而使用外部Tomcat的容器环境。但如果你在Spring Boot配置里指定了server.port=5000,部署时应用还是会尝试启动内嵌Tomcat并占用5000端口,可这个端口已经被外部Tomcat占了,自然就报错了。

具体解决方案

1. 确保WAR包的基础配置正确

首先要确认你的Spring Boot项目已经配置为支持WAR部署:启动类需要继承SpringBootServletInitializer并重写configure方法,这样外部Tomcat才能正确识别并加载你的应用。示例代码如下:

@SpringBootApplication
public class TubeMirrorApiApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(TubeMirrorApiApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(TubeMirrorApiApplication.class, args);
    }
}

2. 解决端口冲突(二选一即可)

  • 方案一:修改Spring Boot的端口配置
    直接在application.properties(或application.yml)里注释掉或删除server.port=5000这一行,因为部署到外部Tomcat后,这个配置是无效的(应用会使用外部Tomcat的端口)。如果只是想保留内嵌Tomcat的端口用于本地测试,也可以改成其他不冲突的端口,比如:

    # 注释掉原配置
    # server.port=5000
    # 或者改成其他端口,仅用于本地启动内嵌Tomcat时使用
    server.port=8081
    
  • 方案二:修改外部Tomcat的端口
    如果你不想改动Spring Boot的配置,可以修改Tomcat的端口。找到Tomcat安装目录下的conf/server.xml文件,找到<Connector>标签,修改port属性为其他未被占用的端口(比如默认的8080):

    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"/>
    

    修改完成后重启Tomcat,再重新部署WAR包即可。

额外提示

部署到外部Tomcat时,Spring Boot的内嵌Tomcat会自动被排除(只要你正确配置了WAR打包),所以server.port这个配置只在你本地启动内嵌Tomcat时有用,部署到外部容器后完全不需要,直接删掉更省心哦。

内容的提问来源于stack exchange,提问作者clorisanderton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:02:36