首次请求接口时 响应时间经常会达到 1-2秒
项目上线后影响不大,但解决了总不是坏事
我们可以配置一个Bean,在服务创建之后请求服务的某个接口,来完成服务的预热
如下:
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.web.client.RestTemplate;
/**
* 服务预启动
* 解决服务首次调用过久的问题
* @author 14501
*/
@Slf4j
@Configuration
public class LoadDataBase {
/**
* 注册RestTemplate
* @param builder boot1.4之后提供的RestTemplate操作类
* 也可以直接返回 new RestTemplate()
* @return 返回注册的RestTemplate到Bean
*/
@Bean
public RestTemplate restTemplate(RestTemplateBuilder builder) {
return builder.build();
}
/**
* 当服务创建完毕后 直接调用Bean 完成服务的接口预热
* @param restTemplate
* @return
*/
@Bean
CommandLineRunner initController(RestTemplate restTemplate) {
return args -> {
log.info("REQUEST " + restTemplate.execute("http://127.0.0.1:9090/user/hello", HttpMethod.GET, null, null));
};
}
}
重启项目后,接口的首次调用响应时间变为 100-200ms,再次响应变为34ms:
参考文章:
SpringBoot重启后首次接口请求慢的问题_springboot首次访问接口慢_gnf_cc的博客-CSDN博客
解决SpringBoot不能自动注入RestTemplate_no qualifying bean of type resttemplate_aisinilehehe的博客-CSDN博客