Spring Boot 部署优化:打包体积缩小 80% 的实战方案
在微服务架构盛行的今天,Spring Boot 应用的打包体积直接影响着部署效率和资源成本。本文将分享如何通过一系列优化手段,将一个典型 Spring Boot 应用的打包体积从 150MB 缩减至 30MB,缩减幅度达 80%。
问题背景
典型场景
假设我们有一个标准的 Spring Boot Web 应用,包含以下依赖:
# 项目依赖概览
dependencies:
- spring-boot-starter-web
- spring-boot-starter-data-jpa
- spring-boot-starter-security
- spring-boot-starter-validation
- mysql-connector-java
- lombok
- commons-lang3
- guava
- poi (Excel 处理)
- itext (PDF 处理)
执行 mvn clean package 后,得到一个 150MB 的 fat JAR:
target/
├── application-1.0.0.jar (150MB)
└── original-application-1.0.0.jar (30KB)
为什么这么大?
让我们深入分析这个 150MB 的 JAR 包结构:
| 组件 | 占比 | 说明 |
|---|---|---|
| 第三方依赖 | 65% | 97.5MB |
| Spring Framework | 20% | 30MB |
| 业务代码 | 2% | 3MB |
| 嵌入式 Tomcat | 10% | 15MB |
| 其他资源 | 3% | - |
分析结论:
- 第三方依赖 占据了 65% 的体积(97.5MB)
- Spring Framework 自身占用 20%(30MB)
- 业务代码 仅占 2%(3MB)
- 嵌入式 Tomcat 占用 10%(15MB)
体积分析
1. 依赖分析工具
首先,我们需要找出哪些依赖占用空间最大。
Maven Dependency Analyzer
# 查看依赖树
mvn dependency:tree
# 分析依赖大小
mvn com.github.ferstl:depgraph-maven-plugin:aggregate
JAR 分析工具
jar tf application.jar | -20
unzip -q application.jar -d app-extracted
-sh app-extracted/BOOT-INF/lib/* | -hr | -10


