是的,同一台服务器完全可以部署两个(甚至多个)Spring Boot 项目。这是非常常见的做法,尤其是在资源有限或需要整合多个微服务的场景中。
不过,需要注意以下几点来避免冲突和确保正常运行:
✅ 1. 端口不能冲突
每个 Spring Boot 项目默认使用 8080 端口。如果两个项目都使用默认端口,会报端口占用错误。
解决方法:
修改 application.yml 或 application.properties 文件中的 server port:
# 第一个项目保持默认或设置为 8080
server:
port: 8080
# 第二个项目改为其他端口,如 8081
server:
port: 8081
这样两个项目就可以同时运行。
✅ 2. 数据库连接配置独立
如果两个项目都连接数据库,确保它们使用的数据库名、用户名、密码等不冲突(除非有意共享同一个数据库)。
建议:
- 使用不同的数据库名
- 或使用不同的数据源配置
✅ 3. JVM 参数与内存分配
每个 Spring Boot 应用都是一个独立的 Java 进程,会占用一定内存。确保服务器内存足够。
可以限制每个应用的 JVM 内存,例如启动时指定:
java -Xms512m -Xmx1g -jar project1.jar
java -Xms512m -Xmx1g -jar project2.jar
防止内存溢出。
✅ 4. 日志文件路径不同
避免两个项目写入同一个日志文件造成混乱。
在 application.yml 中配置不同的日志路径:
logging:
file:
name: /var/log/project1/app.log
logging:
file:
name: /var/log/project2/app.log
✅ 5. 使用进程管理工具(推荐)
为了方便管理多个 Spring Boot 应用,建议使用进程守护工具:
-
nohup + &(简单)
nohup java -jar project1.jar > log1.log 2>&1 & nohup java -jar project2.jar > log2.log 2>&1 & -
systemd(Linux 推荐)
创建 service 文件管理每个项目,实现开机自启、自动重启等。 -
Supervisor
更专业的进程管理工具,适合生产环境。 -
Docker(强烈推荐)
将每个 Spring Boot 项目打包成独立容器,隔离性更好,便于部署和扩展。
✅ 6. 反向X_X(可选)
如果你希望通过域名或路径区分访问两个项目,可以使用 Nginx 做反向X_X:
server {
listen 80;
# 访问 /app1 转发到第一个项目
location /app1/ {
proxy_pass http://localhost:8080/;
}
# 访问 /app2 转发到第二个项目
location /app2/ {
proxy_pass http://localhost:8081/;
}
}
总结
| 项目 | 是否支持 |
|---|---|
| 部署两个 Spring Boot 项目 | ✅ 支持 |
| 使用相同端口 | ❌ 不行(必须改) |
| 共享数据库 | ✅ 可以,但需注意设计 |
| 使用 Docker 隔离 | ✅ 强烈推荐 |
| 使用 Nginx 统一入口 | ✅ 推荐用于生产 |
✅ 结论:完全可以部署,只需注意端口、资源、日志和进程管理即可。
如有具体部署方式(如 Linux、Windows、Docker 等),我可以提供更详细的配置示例。
CDNK博客