Tomcat 7部署WAR包报错:Spring Boot应用与Tomcat端口冲突
嘿,这个问题我之前踩过坑!核心原因很简单:你把**外部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

