SpringBoot文件之構建包的閱讀筆記

jackieathome發表於2024-08-24
  • Packaging Spring Boot Applications

Efficient Deployments

  • Efficient Deployments

    預設情況下,基於SpringBoot框架開發應用時,構建外掛spring-boot-maven-plugin將專案打包為fat jar。
    執行如下命令,解壓構建得到的jar檔案。

    java -Djarmode=tools -jar my-app.jar extract
    

    執行如下命令,使用解壓後的jar檔案,啟動SpringBoot應用。

    java -jar my-app/my-app.jar
    

    執行如下命令,檢視工具的幫助。

    java -Djarmode=tools -jar my-app.jar help extract
    

參考資料

  • 深入理解SpringBoot載入FatJar原理
  • Maven外掛打fatjar的一些技巧
  • 打胖瘦jar包的兩種方式(idea與maven外掛),多圖詳解
  • 啥?你沒聽過SpringBoot的FatJar?
  • maven打包fat-jar注意的問題
  • jar的官方文件
  • Jar 包簽名

CDS

  • Class Data Sharing
    CDS是JVM的特性,有助於縮短Java應用的啟動時間,並減少記憶體佔用量。

    java -Djarmode=tools -jar my-app.jar extract --destination application
    cd application
    java -XX:ArchiveClassesAtExit=application.jsa -Dspring.context.exit=onRefresh -jar my-app.jar
    java -XX:SharedArchiveFile=application.jsa -jar my-app.jar
    
  • JVM CDS

  • How To CDS

  • Spring CDS
    使用CDS時的注意事項:

    • 建立application.jsa時使用的JVM,和執行Java應用載入application.jsa時使用的的JVM,二者需要保持一致,即版本號、安裝路徑等需要保持一致。
    • Java應用啟動時指定的類路徑,需要使用jar檔案的清單,避免使用目錄或者萬用字元。
    • Java應用載入的jar檔案,需要保持一致。
    • Java應用載入的jar檔案的時間戳,需要保持一致。

    增加JVM選項-Xlog:class+load:file=cds.log,透過檢查cds.log的內容,確認CDS最佳化的效果。
    增加JVM選項-Xshare:on,確認CDS是否正常啟用。

  • Builder Configuration

官方文件

  • Class Data Sharing
  • JEP 310: Application Class-Data Sharing
  • JEP 350: Dynamic CDS Archives
  • Application Class-Data Sharing
  • Dynamic CDS Archive
    網頁的錨點有點問題。

參考資料

  • JAVA 提速方法——類資料共享 CDS
  • 覺得 Java 啟動慢?快來使用 CDS 特性飛速啟動~
  • Spring Boot 3.3.0 新特性| 使用 CDS 最佳化啟動時間

AOT

  • Ahead-of-Time Processing With the JVM

    AOT和CDS可以同時使用,透過犧牲一部分動態能力,縮短Java應用的啟動時間。

    mvn -Pnative package
    java -Dspring.aot.enabled=true -jar myapplication.jar
    

    相關的註解,比如:

    • @Profile
    • @Conditional
    • @ConditionalOnProperty
  • Ahead-of-Time Processing

  • Understanding Spring Ahead-of-Time Processing

GraalVM

  • GraalVM Native Images
    基於GraalVM技術,將Java位元組碼處理為平臺相關的程式碼,降低記憶體佔用,縮短應用的啟動時間。
  • Introducing GraalVM Native Images
  • Developing Your First GraalVM Native Application
  • Native Image Compatibility Guide

Checkpoint and Restore

  • Checkpoint and Restore With the JVM

    Coordinated Restore at Checkpoint (CRaC) is an OpenJDK project that defines a new Java API to allow you to checkpoint and restore an application on the HotSpot JVM.

  • JVM Checkpoint Restore
    JVM的啟動選項,如下:
    • -XX:CRaCCheckpointTo=PATH
    • -XX:CRaCRestoreFrom=PATH

參考資料

  • CRaC

  • CRIU程式碼倉庫

    Checkpoint/Restore tool

  • CRIU官網

    Welcome to CRIU, a project to implement checkpoint/restore functionality for Linux.

  • BellSoft Liberica JDK

  • Azul JDK

  • org.crac

Container Images

改進容器的打包方式,分離不變和變的元件,加速容器映象的構建程序。
對於開發人員來說,有助於縮短構建時的等待時間,提高生產率。

  • Container Images
  • Efficient Container Images
  • Dockerfiles
  • Cloud Native Buildpacks

參考資料

  • Java Buildpack Reference
  • Layered Jar or War
  • Packaging Layered Jar or War

相關文章