溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何進行SpringBoot的瘦身部署

發布時間:2021-12-02 16:12:13 來源:億速云 閱讀:233 作者:柒染 欄目:云計算
# 如何進行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)需要特定環境支持。實際實施前建議進行充分測試。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女