使用 JVM 进行提前编译(Ahead-of-Time)处理
使用 AOT 生成的初始化代码来运行你的应用程序,对启动时间是有益的。首先,你需要确保你构建的 jar 包含了 AOT 生成的代码。
备注
AOT 缓存和 Spring 的 AOT 可以结合使用,以进一步提升启动时间。
对于 Maven,这意味着你应该使用 -Pnative 进行构建,以激活 native 配置文件:
$ mvn -Pnative package
对于 Gradle,你需要确保你的构建包含 org.springframework.boot.aot 插件。
当 JAR 构建完成后,使用 spring.aot.enabled 系统属性设置为 true 来运行它。例如:
$ java -Dspring.aot.enabled=true -jar myapplication.jar
........ Starting AOT-processed MyApplication ...
请注意,使用提前编译(ahead-of-time processing)存在一些缺点。它意味着以下限制:
-
类路径在构建时是固定且完全定义的
-
应用程序中定义的 Bean 无法在运行时更改,这意味着:
-
不支持根据 Bean 是否创建而变化的属性(例如 @ConditionalOnProperty 和
.enabled属性)。
要了解有关提前处理(ahead-of-time processing)的更多信息,请参阅 Understanding Spring Ahead-of-Time Processing 部分。