Efficient deployments
Unpacking the Executable JAR
如果你的应用程序在容器中运行,你可以使用可执行 jar,但将其解包并以不同的方式运行,通常也更有利。某些 PaaS 实现也可能会在运行前解包归档文件。比如,Cloud Foundry 就是这样操作的。按以下方式启动相应的启动器,是运行解包归档文件的一种方法:
$ jar -xf myapp.jar
$ java org.springframework.boot.loader.launch.JarLauncher
实际上,这种方式的启动速度会稍微快一些(根据 jar 的大小),而不是从未解包的归档文件启动。启动之后,你就不应再期望有任何差异。
在解压 JAR 文件后,还可以通过使用该应用程序的“自然”main 方法,而不是 `JarLauncher`来运行该应用程序,从而获得额外的启动时间加速。例如:
$ jar -xf myapp.jar
$ java -cp "BOOT-INF/classes:BOOT-INF/lib/*" com.example.MyApplication
在应用程序的 main 方法上使用 `JarLauncher`可以额外获得可预测的类路径顺序。该 jar 包含一个 `classpath.idx`文件,`JarLauncher`在构建类路径时会使用该文件。 |
Using Ahead-of-time Processing With the JVM
使用 AOT 生成的初始化代码来运行应用程序,对启动时间非常有帮助。首先,你需要确保你编译的 jar 包中包括 AOT 生成的代码。
对于 Maven,这意味着你应该使用 `-Pnative`编译以激活 `native`配置文件:
$ mvn -Pnative package
对于 Gradle,你需要确保编译中包括 `org.springframework.boot.aot`插件。
当编译完成后,使用设置了 `true`的 `spring.aot.enabled`系统属性运行该应用程序。例如:
$ java -Dspring.aot.enabled=true -jar myapplication.jar
........ Starting AOT-processed MyApplication ...
请注意,使用提前处理存在缺点。这意味着以下限制:
-
类路径在编译时已固定并得到完全定义
-
应用程序中定义的 Bean 在运行时不可更改,这意味着:
-
Spring
@Profile
注解和特定于概要文件的配置 have limitations 。 -
如果创建 bean,则不会支持发生更改的属性(例如,
@ConditionalOnProperty
和.enable
属性)。
-
如需了解有关提前处理的更多信息,请参阅 Understanding Spring Ahead-of-Time Processing section。
Checkpoint and Restore With the JVM
Coordinated Restore at Checkpoint (CRaC) 是一个 OpenJDK 项目,它定义了一个新的 Java API,使你能够在 HotSpot JVM 上检查点和恢复应用程序。它基于 CRIU,一个在 Linux 上实现检查点/恢复功能的项目。
原则是:你按通常的方式启动应用程序,但需使用 CRac 启用的 JDK 版本,比如 BellSoft Liberica JDK with CRaC或 Azul Zulu JDK with CRaC。然后在某个时间点,可能在通过执行所有通用代码路径预热 JVM 的一些工作负载之后,你可以使用 API 调用(`jcmd`命令、HTTP 端点或其他机制)触发一个检查点。
然后,正在运行的 JVM 的内存表示(包括其热度)序列化到磁盘中,这允许在稍后的时间点进行快速恢复,甚至可以在具有类似操作系统和 CPU 架构的另一台计算机上进行恢复。已恢复的进程保留了 HotSpot JVM 的所有功能,包括在运行时进行进一步 JIT 优化。
Spring Boot 在 Spring Framework 提供的基础上,为检查点和恢复应用程序提供支持,并开箱即用地管理资源的生命周期,例如套接字、文件和线程池 on a limited scope。针对其他依赖项以及可能处理此类资源的应用程序代码,预计会进行额外的生命周期管理。
你可以在 {url-spring-framework-docs}/integration/checkpoint-restore.html[Spring Framework JVM 检查点恢复支持文档] 中找到有关支持的两种模式(“正在运行应用程序的按需检查点/恢复”和“启动时的自动检查点/恢复”)的更多详细信息,以及如何启用检查点和恢复支持以及一些指南。