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)文章
利用Java實(shí)現(xiàn)簡(jiǎn)單的詞法分析器實(shí)例代碼
眾所周知編譯原理中的詞法分析算是很重要的一個(gè)部分,原理比較簡(jiǎn)單,不過(guò)網(wǎng)上大部分都是用C語(yǔ)言或者C++來(lái)編寫(xiě),因?yàn)樽罱趯W(xué)習(xí)Java,故用Java語(yǔ)言實(shí)現(xiàn)了簡(jiǎn)單的詞法分析器。感興趣的朋友們可以參考借鑒,下面來(lái)一起看看吧。2016-12-12
Java數(shù)據(jù)結(jié)構(gòu)之實(shí)現(xiàn)哈希表的分離鏈接法
今天給大家?guī)?lái)的是關(guān)于Java數(shù)據(jù)結(jié)構(gòu)的相關(guān)知識(shí),文章圍繞著Java哈希表的分離鏈接法展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06
Mybatis如何按順序查詢出對(duì)應(yīng)的數(shù)據(jù)字段
這篇文章主要介紹了Mybatis如何按順序查詢出對(duì)應(yīng)的數(shù)據(jù)字段,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-01-01
詳解用Spring Boot Admin來(lái)監(jiān)控我們的微服務(wù)
這篇文章主要介紹了用Spring Boot Admin來(lái)監(jiān)控我們的微服務(wù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
Java多條件判斷場(chǎng)景中規(guī)則執(zhí)行器的設(shè)計(jì)
近日在公司領(lǐng)到一個(gè)小需求,需要對(duì)之前已有的試用用戶申請(qǐng)規(guī)則進(jìn)行拓展。本文去掉if 判斷,試試用一個(gè)規(guī)則執(zhí)行器來(lái)替代它,感興趣的可以了解一下2021-06-06
Java使用FutureTask實(shí)現(xiàn)預(yù)加載的示例詳解
基于FutureTask的特性,通??梢允褂肍utureTask做一些預(yù)加載工作,比如一些時(shí)間較長(zhǎng)的計(jì)算等,本文就來(lái)和大家講講具體實(shí)現(xiàn)方法吧,感興趣的可以了解一下2023-06-06
Java生成指定范圍內(nèi)的一個(gè)隨機(jī)整數(shù)2種方式
本文主要介紹了Java生成指定范圍內(nèi)的一個(gè)隨機(jī)整數(shù)2種方式,主要使用Math.random()和Random.nextInt()這兩種,具有一定的參考價(jià)值,感興趣的可以了解一下2023-04-04
springboot application.yml使用@@pom文件配置問(wèn)題
這篇文章主要介紹了springboot application.yml使用@@pom文件配置問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
java 最新Xss攻擊與防護(hù)(全方位360°詳解)
這篇文章主要介紹了java 最新Xss攻擊與防護(hù)(全方位360°詳解),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01

