SpringBoot重啟后,第一次請(qǐng)求接口請(qǐng)求慢的問(wèn)題及解決
1、DispatcherServlet默認(rèn)是懶加載
即工程啟動(dòng)的時(shí)候,Applicationcontext會(huì)將所有的bean加載到容器,但是DispatcherServlet是沒(méi)有加載的,只有第一次訪問(wèn)的時(shí)候才會(huì)加載
場(chǎng)景一
DispatcherServlet懶加載情況,啟動(dòng)的時(shí)候如下圖

只有一個(gè)ApplicationContext的初始化,此時(shí)并沒(méi)有DispatcherServlet的初始化,接下來(lái)我們進(jìn)行一次接口調(diào)用
如下圖:

發(fā)現(xiàn)在進(jìn)行接口調(diào)用的時(shí)候,才初始化了DispatcherServlet,接下來(lái)我們?cè)龠M(jìn)行一次接口調(diào)用
如下圖:

此時(shí),直接進(jìn)行方法的調(diào)用和返回。
場(chǎng)景二
spring.mvc.servlet.load-on-startup=1
DispatcherServlet關(guān)閉懶加載,啟動(dòng)的時(shí)候如下圖:

同時(shí)完成了ApplicationContext和DispatcherServlet的初始化,此時(shí)再進(jìn)行接口調(diào)用,會(huì)發(fā)現(xiàn)即便是第一次調(diào)用,也直接進(jìn)入了方法
如下圖:

通過(guò)上述測(cè)試可知,通過(guò)配置 spring.mvc.servlet.load-on-startup=1 關(guān)閉DispatcherServlet懶加載
使第一次接口訪問(wèn)的時(shí)候直接進(jìn)行方法的調(diào)用,提高速度
2、隨機(jī)數(shù)生成慢的原因和解決方案
Java隨機(jī)數(shù)生成依賴熵源(Entropy Source)
默認(rèn)的阻塞型的 /dev/random熵源可能導(dǎo)致阻塞
而換一個(gè)非阻塞的 /dev/urandom的熵源就可以了
解決方法
- 臨時(shí)、方便
以這種方式運(yùn)行jar包
java -Djava.security.egd=file:/dev/./urandom -jar XXX.jar XXX
- 永久
進(jìn)入你的JAVA_HOME的jre目錄下找到并vim編輯這個(gè)文件:
$JAVA_HOME/jre/lib/security/java.security
- 找到:
securerandom.source=file:/dev/random 這一行
- 改之前:
securerandom.source=file:/dev/random
- 改為:
securerandom.source=file:/dev/urandom
3、進(jìn)行異步處理
提高整體的響應(yīng)時(shí)間
4、加入緩存
例如熱點(diǎn)數(shù)據(jù)的預(yù)加載等,提高響應(yīng)時(shí)間
5、工程啟動(dòng)之后
就進(jìn)行一次訪問(wèn)
@Slf4j
@Configuration
public class LoadDatabase {
@Bean
CommandLineRunner initController(RestTemplate restTemplate) {
return args -> {
log.info("REQUEST " + restTemplate.execute("http://127.0.0.1:9999/t1", HttpMethod.GET, null, null));
};
}
}
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決在啟動(dòng)eclipse的tomcat進(jìn)行訪問(wèn)時(shí)出現(xiàn)404問(wèn)題的方法
這篇文章主要介紹了解決在啟動(dòng)eclipse的tomcat進(jìn)行訪問(wèn)時(shí)出現(xiàn)404問(wèn)題的方法,感興趣的小伙伴們可以參考一下2016-04-04
springboot結(jié)合mybatis-plus快速生成項(xiàng)目模板的方法
Mybatis-Plus是一個(gè) Mybatis 的增強(qiáng)工具,在 Mybatis 的基礎(chǔ)上只做增強(qiáng)不做改變,為簡(jiǎn)化開發(fā)、提高效率而生,接下來(lái)通過(guò)本文給大家分享springboot結(jié)合mybatis-plus快速生成項(xiàng)目模板的方法,感興趣的朋友一起看看吧2021-06-06
對(duì)象轉(zhuǎn)Json字符串時(shí)如何忽略指定屬性
這篇文章主要介紹了對(duì)象轉(zhuǎn)Json字符串時(shí)如何忽略指定屬性,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
SpringBoot啟動(dòng)報(bào)錯(cuò)屬性循環(huán)依賴報(bào)錯(cuò)問(wèn)題的解決
這篇文章主要介紹了SpringBoot啟動(dòng)報(bào)錯(cuò)屬性循環(huán)依賴報(bào)錯(cuò)問(wèn)題的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05
Struts1教程之ActionMapping_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Struts1教程之ActionMapping,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09
詳解JAVA使用Comparator接口實(shí)現(xiàn)自定義排序
這篇文章主要介紹了JAVA使用Comparator接口實(shí)現(xiàn)自定義排序,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03

