Spring Boot 3.0正式发布


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构建案例: