楼层: 首页/ 软件技术/ Spring Boot 3.5/ 打包与部署:Jar、Docker、War
11

打包与部署:Jar、Docker、War

Packaging & Deployment

Spring Boot 推荐打可执行 Jar——内嵌 Tomcat,java -jar 直接跑。云原生时代,再把 Jar 包进 Docker 镜像。War 包部署到外部 Tomcat 的老做法,新项目基本不用了。

Dockerfile:多阶段构建

# 第一阶段:Maven 构建 FROM maven:3.9-eclipse-temurin-21 AS build WORKDIR /app COPY pom.xml . RUN mvn dependency:go-offline COPY src ./src RUN mvn package -DskipTests # 第二阶段:运行时,只留 JRE 和 jar FROM eclipse-temurin:21-jre WORKDIR /app COPY --from=build /app/target/*.jar app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "app.jar"]

上线前检查清单

检查项怎么查
profile 激活生产用 prod,别留 dev。
show-sql 关掉生产环境 show-sql=false,不然日志爆。
ddl-auto=none生产别让 Hibernate 自动改表,用 Flyway/Liquibase。
Actuator 端点收紧只暴露 health/metrics,别把 env/beans 暴露公网。
DevTools 排除pom 里确保 devtools 是 optional。
日志文件输出生产必须写文件,不能只打控制台。
数据库连接池maximum-pool-size 按数据库能力调,别默认值上线。
构建并运行: docker build -t myapp:1.0 . docker run -p 8080:8080 myapp:1.0
本章面试题 · 第 11 章(打包与部署)

1.(概念题)Spring Boot 为什么能 java -jar 直接跑?内嵌 Tomcat 是怎么回事?

查看答案

答案:spring-boot-maven-plugin 把应用打成一个"可执行 fat jar"——应用类、依赖、内嵌 Tomcat 全塞进去。main 方法启动时在 JVM 里 new 一个 Tomcat 实例,把 DispatcherServlet 注册进去。解析:不再需要外部 Tomcat,一个 jar 就是一个独立进程。

2.(对比题)打 jar 跑和打 war 部署外部 Tomcat,怎么选?

查看答案

答案:Cloud 时代一律打 jar 内嵌容器(配合 Docker),启动快、易横向扩展。war 只在公司强制要求用外部 Tomcat 的老环境才用。解析:Spring Boot 默认推荐 jar。