在部署多个 Spring Boot 项目时,如果它们默认都使用 8080 端口(Tomcat 默认端口),就会发生端口冲突。解决该问题有以下几种常用方法:
✅ 方法一:通过 application.properties 或 application.yml 指定不同端口(推荐)
方式 A:每个项目单独配置
在项目根目录的 src/main/resources/application.properties 中添加:
server.port=8081
或在 application.yml 中:
server:
port: 8082
✅ 优点:简单、清晰、可版本控制;适合开发/测试环境。
⚠️ 注意:需为每个项目设置唯一端口。
方式 B:通过启动参数动态指定(灵活,适合容器化或脚本部署)
java -jar app.jar --server.port=8083
# 或
java -Dserver.port=8084 -jar app.jar
适用于:
- CI/CD 流水线
- Docker 编排(配合环境变量)
- 多实例快速启停
✅ 方法二:使用 @Profile + 多配置文件(进阶)
创建不同环境的配置文件:
src/main/resources/
├── application.yml # 默认配置
├── application-dev.yml # dev 环境:port=8081
└── application-prod.yml # prod 环境:port=8082
启动时指定 profile:
java -jar app.jar --spring.profiles.active=dev
适合需要按环境自动切换端口的场景。
✅ 方法三:Spring Boot Actuator + 健康检查(生产级建议)
即使端口不同,也建议启用 Actuator 来监控服务状态:
# application.yml
management:
endpoints:
web:
exposure:
include: health,info
endpoint:
health:
show-details: always
配合 Nginx 反向X_X或负载均衡器(如 Kubernetes Ingress),可实现统一入口 + 后端多端口路由。
🚫 不推荐的做法
- 修改
pom.xml中的 Tomcat 依赖 scope(无法真正避免冲突) - 手动修改
EmbeddedServletContainerFactoryBean(过度设计,易出错) - 强制绑定到固定 IP+ 端口组合(除非网络隔离要求严格)
🔧 额外建议:自动化检测端口占用
部署前可加脚本检查端口是否可用:
#!/bin/bash
PORT=$1
if lsof -i :$PORT > /dev/null; then
echo "Port $PORT is already in use!"
exit 1
fi
echo "Port $PORT is free."
需要我帮你生成一个完整的示例项目结构(含多端口配置 + 启动脚本)吗?
PHPWP博客