部署 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 以在退出前排空进行中的请求