Spring Boot的应用程序在启动时,JVM需要加载各种类进行初始化,导致初期的HTTP请求往往响应时间较长,这也就是我们经常遇到的冷启动问题。通过warmup-spring-boot-starter
可以在应用程序对外提供服务之前预热HTTP相关的组件,从而降低HTTP请求响应时间。
通过在业务服务中使用对比测试,可有效降低响应时间达30%~90%。
此项目受到warm-me-up项目启发,将预热功能包装成Spring Boot Starter以方便使用。
如果希望在启动时对其他组件(数据库连接、缓存加载等)进行预热,可以参考:
@Component
public class WarmUpListener implements ApplicationListener<ApplicationReadyEvent> {
@Override
public void onApplicationEvent(ApplicationReadyEvent event) {
// 对其他组件进行预热
}
}
- 增加依赖;
<dependency>
<groupId>io.github.shelltea</groupId>
<artifactId>warmup-spring-boot-starter</artifactId>
<version>${version}</version>
</dependency>
- 正常启动服务,如果日志中输出以下内容表示预热完成。
Completed warm up application
参数名 | 类型 | 默认值 | 说明 |
---|---|---|---|
management.endpoint.warm-up.enable | boolean | true | 开启预热 |
management.endpoint.warm-up.times | int | 5 | 预热接口请求次数 |
Spring Boot 版本 | 兼容 |
---|---|
2.7.x | √ |
2.6.x | √ |
2.5.x | √ |
2.4.x | √ |
2.3.x.RELEASE | √ |
2.2.x.RELEASE | √ |
2.1.x.RELEASE | √ |
2.0.x.RELEASE | √ |