Spring Boot 3.0正式釋出

banq發表於2022-11-25

SpringBoot 3.0現已正式釋出,可以在Maven Central中找到。

這是自四年前釋出2.0以來的第一個主要版本。它也是SpringBoot的第一個GA版本,提供了對Spring Framework 6.0和GraalVM的支援。

新版本的亮點包括:


最大亮點是用GraalVM提前編譯AOT升級了Spring-Native:
支援使用GraalVM將Spring應用編譯成本地可執行的映象檔案,可以顯著提高啟動速度和峰值效能,減少記憶體佔用。
傳統的應用程式是編譯成位元組碼,然後由JVM解釋,最後編譯成機器碼執行,而Spring Native是透過AOT提前編譯成機器碼,執行時直接靜態編譯成可執行檔案。
提前編譯AOT實際上就是不透過中間步驟(位元組碼,然後即時JIT編譯器),而是在過程的一開始就把原始碼編譯成最終版本。

這種方法使得提前最佳化和生成機器程式碼成為可能,同時擺脫了所有的JVM臃腫,如Classpath或虛擬機器本身。

然而,這也不是免費的:
由Graal VM編譯的應用程式必須在 "封閉世界假設 "下工作。
這意味著,應用程式中所有可以在執行時呼叫的位元組碼必須在構建時已經知道(也能被觀察到和分析)。

這對使用反射機制的程式影響特別大:
這是因為編譯器必須猜測它應該把哪些(通常是動態的)資源新增到最終的工件中,儘管程式碼中沒有直接引用它們。
眾所周知,Spring在很大程度上是基於反射機制的,因此需要將其精確地適應於GraalVM,這個過程耗費了近三年時間。

另外一項新功能:
為 Spring Integration 元件的觀察模式提供配置屬性:
Spring Integration 可以根據@EnableIntegrationManagement.observationPatterns值檢測其元件

  • 公開 spring.integration.management.observation-patterns 配置屬性
  • 將此屬性傳播到 IntegrationAutoConfiguration.IntegrationManagementConfiguration 的 @EnableIntegrationManagement 中
  • 透過 IntegrationAutoConfigurationTests.integrationManagementInstrumentedWithObservation()驗證該屬性是否有作用。


更多修復

SpringBoot3構建演示
透過Spring Initialzr新建工程,使用最新版本的Spring Boot 3.0.0-SNAPSHOT,勾選GraalVM Native Support,新建工程後新增TestController:

@RestController 
public  class  TestController { 

    @GetMapping("/") 
    public String hello () { 
        return  "GraalVM ..." ; 
    } 
}

直接執行程式,發現啟動時間大約需要1秒。

下面使用Graal生成本機原生映象:
執行生成映象檔案的命令:
./gradlew nativeCompile
這個AOT過程比較耗時,大概2分鐘。
執行命令:
./build/native/nativeCompile/demo2

啟動時間是 0.082 秒,快了 10 倍多。

如果你使用maven,使用如下命令:
  •  mvnw -Pnative native:compile 
  •  ./target/demo2


SpringBoot3構建案例:

相關文章