运行Spring Boot项目需要在服务器上安装哪些依赖?

运行一个 Spring Boot 项目(以可执行 JAR 方式部署,即 java -jar xxx.jar)时,服务器上通常只需安装 Java 运行环境(JRE/JDK),无需额外安装 Tomcat、Maven、Gradle 或数据库等——因为这些大多已内嵌或按需配置。但具体依赖需根据项目实际功能决定。以下是详细分类说明:


✅ 必需依赖(最低要求)

组件 版本要求 说明
Java 运行环境(JRE)或 JDK ≥ 项目编译版本(如 Spring Boot 3.x 要求 Java 17+;2.x 通常需 Java 8–17) 唯一硬性依赖
• 推荐安装 JDK(含 JRE),便于调试和使用 jstat/jstack 等工具
• 可通过 java -version 验证

💡 Spring Boot 默认内嵌 Tomcat(或 Jetty/Undertow),无需单独安装 Web 服务器!


⚙️ 按功能可选依赖(根据项目实际需要)

场景 所需依赖 说明
数据库访问(如 MySQL/PostgreSQL) ✅ 对应数据库的 JDBC 驱动(已打包在 JAR 中)
无需安装数据库服务端(除非项目自己运行 DB)
• JDBC 驱动(如 mysql-connector-j)通常已由 Maven/Gradle 声明并打包进 fat-JAR
但数据库服务本身(MySQL、PostgreSQL 等)需单独部署(可本地、远程或云服务)
Redis 缓存 ❌ 不需安装 Redis 客户端(驱动已打包)
需独立部署 Redis 服务(如 redis-server
• Spring Boot 通过 Lettuce/Jedis 连接,驱动已包含
• Redis 服务需另行安装或使用云 Redis(如 AWS ElastiCache)
消息队列(RabbitMQ/Kafka) 同上:客户端驱动已打包,服务端需独立部署 • Kafka 需 ZooKeeper(旧版)或 KRaft(新版本)
• RabbitMQ 需安装 Erlang + RabbitMQ Server
文件存储(如 MinIO、OSS) ❌ 无需安装客户端 SDK(已打包)
✅ 若自建对象存储,需部署 MinIO 等服务
• 云存储(阿里云 OSS、AWS S3)仅需配置 AccessKey 和 Endpoint
定时任务/分布式锁(如 Quartz、ShedLock) 通常无额外服务依赖,但集群场景可能需数据库或 Redis 支撑 • Quartz JDBC 模式需数据库表;ShedLock 需 DB/Redis/ZooKeeper
日志聚合(ELK/Splunk) ❌ 不影响启动,仅需配置 Logback/Appender • Logstash/Filebeat 等为外部采集组件,非运行必需
监控(Actuator + Prometheus/Grafana) Actuator 端点内置,但 Prometheus 需单独部署并配置抓取 /actuator/prometheus 端点开箱即用,无需额外依赖

🚫 不需要安装(常见误区)

组件 原因
Apache Tomcat / Nginx(作为应用服务器) Spring Boot 内嵌 Tomcat,默认监听 8080;Nginx 仅当需反向X_X、HTTPS 终止、负载均衡时才安装(属运维层,非 Spring Boot 运行必需)
Maven / Gradle 构建阶段使用,运行时完全不需要(JAR 已是构建产物)
Git / IDE / 编译器 开发环境所需,生产服务器严禁安装(安全风险)
Node.js / npm 除非项目含前端资源且使用 spring-boot-devtools 或构建时需 Webpack(但生产推荐预构建静态资源)

✅ 生产部署最佳实践建议

  1. 最小化系统镜像
    → 使用 openjdk:17-jre-slim(Docker)或仅安装 openjdk-17-jre-headless(Linux)。
  2. 配置外部化
    → 用 application-prod.yml、环境变量或 Config Server 管理配置,避免硬编码。
  3. 进程管理
    → 使用 systemd(Linux)、supervisord 或容器编排(Docker/K8s)管理 JVM 进程。
  4. JVM 参数优化
    → 示例:java -Xms512m -Xmx1024m -XX:+UseG1GC -jar app.jar
  5. 安全加固
    → 禁用 spring-boot-devtools、关闭敏感 Actuator 端点(如 /shutdown)、启用 HTTPS。

🔍 快速验证清单(部署前检查)

# 1. Java 版本是否兼容?
java -version  # 应 ≥ Spring Boot 要求(如 17.0.1)

# 2. JAR 是否可执行?
file myapp.jar  # 应显示 "Java archive data (ZIP)"

# 3. 端口是否空闲?
netstat -tuln | grep :8080

# 4. 配置是否正确?(检查 application.yml 中 datasource.url、redis.host 等)

总结一句话

Spring Boot 生产运行 = Java(JRE/JDK) + 项目 JAR 文件 + 外部服务(DB/Redis等,按需)
其他均为开发、构建或运维增强项,非运行必需。

如需我帮你生成 systemd 服务文件、Dockerfile 或 JVM 启动脚本,欢迎随时提供项目细节(如 Spring Boot 版本、是否用数据库、部署方式等) 😊