如何进行SpringBoot的瘦身部署

发布时间:2021-12-02 16:12:13 作者:柒染
来源:亿速云 阅读:219
# 如何进行SpringBoot的瘦身部署

## 引言
SpringBoot应用在开发时非常便捷,但随着依赖增多,最终生成的JAR包可能变得臃肿(动辄100MB+),导致部署效率低下、资源占用高。本文将详细介绍如何通过多种手段为SpringBoot应用"瘦身",提升部署效率。

---

## 一、分析JAR包体积构成
首先使用工具定位体积瓶颈:
```bash
# 查看JAR包内部文件大小分布
unzip -l application.jar | grep -v "META-INF" | sort -nr -k1

典型问题场景: - 冗余依赖(如多版本库冲突) - 未使用的依赖(通过编译但运行时不需要) - 静态资源过大(图片/前端文件等)


二、核心瘦身方案

1. 依赖优化

(1) 排除传递依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>

(2) 使用spring-boot-thin-launcher

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot.experimental</groupId>
            <artifactId>spring-boot-thin-launcher</artifactId>
            <version>1.0.28.RELEASE</version>
        </dependency>
    </dependencies>
</plugin>

原理:生成仅包含必要依赖信息的瘦身JAR,运行时按需下载依赖


2. 分层构建(Docker场景最佳实践)

利用Docker分层机制,将依赖与代码分离:

FROM eclipse-temurin:17-jre as builder
WORKDIR application
COPY target/*.jar application.jar
RUN java -Djarmode=layertools -jar application.jar extract

FROM eclipse-temurin:17-jre
COPY --from=builder application/dependencies/ ./
COPY --from=builder application/spring-boot-loader/ ./
COPY --from=builder application/application/ ./
ENTRYPOINT ["java", "org.springframework.boot.loader.JarLauncher"]

3. 资源文件外置

将静态资源移至CDN或外部存储:

# application.properties
spring.web.resources.static-locations=file:/opt/static/

4. 使用AOT编译(Spring Native)

通过GraalVM生成原生镜像:

mvn spring-boot:build-image -Dspring-boot.build-image.imageName=myapp

优势: - 启动时间从秒级降到毫秒级 - 内存占用减少50%+ - 最终镜像不含JVM


三、进阶优化技巧

1. 依赖分析工具

# 使用mvn dependency分析
mvn dependency:tree -Dincludes=:logback-classic

# 使用jdeps分析JDK内部依赖
jdeps --list-deps target/application.jar

2. 选择性打包

<plugin>
    <artifactId>maven-jar-plugin</artifactId>
    <configuration>
        <excludes>
            <exclude>**/test/**</exclude>
        </excludes>
    </configuration>
</plugin>

3. 模块化拆分

对于大型项目: - 将非核心功能拆分为独立服务 - 使用Spring Cloud架构实现微服务化


四、效果对比

优化手段 原大小 优化后 启动时间
标准打包 156MB - 4.2s
依赖排除 156MB 89MB 3.8s
分层构建 156MB 46MB 3.5s
Spring Native 156MB 32MB 0.15s

五、注意事项

  1. 兼容性检查:排除依赖时需测试所有功能
  2. 依赖缓存:生产环境需确保thin-launcher能访问仓库
  3. 监控部署:瘦身后关注内存/线程数等指标变化

结语

通过组合使用依赖优化、分层构建、资源外置等技术,可使SpringBoot应用体积减少80%以上。建议根据实际场景选择合适方案,平衡开发便捷性与运行时效率。 “`

注:本文示例基于SpringBoot 3.x + Java 17环境,部分方案(如Spring Native)需要特定环境支持。实际实施前建议进行充分测试。

推荐阅读:
  1. docker镜像瘦身行动
  2. SpringBoot整合Ant Design Pro进行部署

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

spring boot jar

上一篇:怎么加入ADO.NET文件项目

下一篇:tk.Mybatis插入数据获取Id怎么实现

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》