在Spring Boot 3中,如何使用常规JVM应用程序从Spring AOT中获益?



Spring Boot 3将于2022年11月发布。候选版本2已经发布。

Spring Boot 3将随Spring AOT一起发布。Spring AOT生成额外的源代码,以避免反射调用。

引入Spring AOT生成GraalVM原生映像。然而,从理论上讲,Spring AOT也可以用于常规JVM应用程序,以加快启动过程(因为常规调用应该比反射调用快)。

不幸的是,我没有在Spring Boot 3参考文档中找到任何关于如何在常规JVM应用程序中使用Spring AOT的内容。您知道如何从常规JVM应用程序中的Spring AOT中获益吗?

介绍如何在JRE环境下运行AOT代码。

基本上,你必须像这样构建你的jar

mvn clean compile spring-boot:process-aot package

并像这样运行

java -DspringAot=true -jar your-application.jar

在Spring Boot中使用AOT的两种有用方法:

使用docker镜像

除了有Java>= 17和Gradle>= 7.3安装,在您的构建。Gradle你将添加以下插件:

id 'org.graalvm.buildtools.native' version '0.9.23'

初始构建。Gradle应该是这样的:

plugins {
id 'java'
id 'org.springframework.boot' version '3.1.2'
id 'io.spring.dependency-management' version '1.1.2'
id 'org.graalvm.buildtools.native' version '0.9.23'
}
group = 'com.test'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '17'
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

就是这样。现在,您可以运行以下命令构建docker映像:

gradle bootBuildImage

现在你可以运行docker images来查看你刚刚创建的图像并运行它:

docker run --rm <image_id>

将其编译为本机应用

在这种情况下,您应该应用与上面示例中相同的插件。此外,您还必须安装GraalVM>= 17和Gradle>= 7.3。然后,您可以运行以下命令来构建它:

gradle nativeCompile

和运行你的应用程序,你可以只运行:

/<app_name>/build/native/nativeCompile/<app_name>

,大家。值得一提的是,由于封闭世界假设,某些Spring特性可能无法正常工作,这会使反射更难实现。

我认为他们因为Spring倡导者的这个视频而走向了不同的方向。看起来AOT只与GraalVM一起使用。

回答你的问题,你只能在GraalVM中使用AOT的好处。

最新更新