Skip to content
返回部署

部署 Spring Boot 应用

Java/Kotlin 企业应用打包为自包含 JAR,部署到 JVM 容器、Cloud Foundry 或 Kubernetes。

平台高级

为什么

Spring Boot 可执行 JAR 内嵌 Tomcat 消除外部应用服务器设置。Spring 生态(Security、Data、Cloud)通过自动配置提供企业应用所需一切。

平台即服务采用率 2024 年增长 24%,团队从虚拟机管理转向 git push 部署。the cloud infrastructure market reached $330B in 2024, growing 22% year-over-year (Synergy Research),PaaS 层捕获了大多数新工作负载。

何时使用

企业 Java 后端、JVM 微服务和投入 Spring 生态的团队用 Spring Boot。轻量 API 避免 — Node/Python 更简单。

如何做

1. 构建 — ./mvnw package 或 ./gradlew bootJar 生成 target/app.jar 2. 运行 — java -jar app.jar,内嵌 Tomcat 端口 8080 3. Docker — eclipse-temurin:21-jre,COPY jar,java -jar 4. Kubernetes — JAR 入镜像,Deployment + Service + HPA 5. Profile — spring.profiles.active=prod 环境配置 6. Actuator — /actuator/health 供 k8s 探针,/actuator/metrics 监控 7. GraalVM — native-image 即时启动(无 JVM 预热)

示例

# Dockerfile — JRE 运行时 FROM eclipse-temurin:21-jre-alpine WORKDIR /app COPY target/app.jar app.jar EXPOSE 8080 HEALTHCHECK --interval=30s CMD wget --spider http://localhost:8080/actuator/health || exit 1 ENTRYPOINT ["java", "-jar", "app.jar", "--spring.profiles.active=prod"] # 多阶段构建(构建 + 运行时) FROM maven:3.9-eclipse-temurin-21 AS build WORKDIR /app COPY . . RUN mvn package -DskipTests FROM eclipse-temurin:21-jre-alpine COPY --from=build /app/target/app.jar app.jar ENTRYPOINT ["java", "-jar", "app.jar"] # application-prod.yml server: port: 8080 spring: datasource: url: ${DATABASE_URL} management: endpoints: web: exposure: include: health,metrics

常见问题

  • ⚠JAR 200MB+ — 包含所有 Spring starter,用 spring-boot-gradle-plugin 分层 jar 或 jlink
  • ⚠JVM 冷启动 10+ 秒 — serverless 问题,用 GraalVM native-image 即时启动
  • ⚠OutOfMemoryError — JVM 堆太小,设 -Xmx2g 或用容器感知 JVM(Java 11+)

最佳实践

  • ✓用 Java 21+(容器感知)— 自动检测 cgroup 内存限制,无需手动 -Xmx
  • ✓启用 Spring Boot Actuator health/metrics — 开箱即用 k8s 探针和 Prometheus 指标
  • ✓设置健康检查和优雅关闭 — 处理 SIGTERM 以在退出前排空进行中的请求

常见问题解答