SpringBoot重啟后,第一次請求接口請求慢的問題及解決
1、DispatcherServlet默認(rèn)是懶加載
即工程啟動的時(shí)候,Applicationcontext會將所有的bean加載到容器,但是DispatcherServlet是沒有加載的,只有第一次訪問的時(shí)候才會加載
場景一
DispatcherServlet懶加載情況,啟動的時(shí)候如下圖
只有一個(gè)ApplicationContext的初始化,此時(shí)并沒有DispatcherServlet的初始化,接下來我們進(jìn)行一次接口調(diào)用
如下圖:
發(fā)現(xiàn)在進(jìn)行接口調(diào)用的時(shí)候,才初始化了DispatcherServlet,接下來我們再進(jìn)行一次接口調(diào)用
如下圖:
此時(shí),直接進(jìn)行方法的調(diào)用和返回。
場景二
spring.mvc.servlet.load-on-startup=1
DispatcherServlet關(guān)閉懶加載,啟動的時(shí)候如下圖:
同時(shí)完成了ApplicationContext和DispatcherServlet的初始化,此時(shí)再進(jìn)行接口調(diào)用,會發(fā)現(xiàn)即便是第一次調(diào)用,也直接進(jìn)入了方法
如下圖:
通過上述測試可知,通過配置 spring.mvc.servlet.load-on-startup=1 關(guān)閉DispatcherServlet懶加載
使第一次接口訪問的時(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、工程啟動之后
就進(jì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)文章
解決在啟動eclipse的tomcat進(jìn)行訪問時(shí)出現(xiàn)404問題的方法
這篇文章主要介紹了解決在啟動eclipse的tomcat進(jìn)行訪問時(shí)出現(xiàn)404問題的方法,感興趣的小伙伴們可以參考一下2016-04-04springboot結(jié)合mybatis-plus快速生成項(xiàng)目模板的方法
Mybatis-Plus是一個(gè) Mybatis 的增強(qiáng)工具,在 Mybatis 的基礎(chǔ)上只做增強(qiáng)不做改變,為簡化開發(fā)、提高效率而生,接下來通過本文給大家分享springboot結(jié)合mybatis-plus快速生成項(xiàng)目模板的方法,感興趣的朋友一起看看吧2021-06-06對象轉(zhuǎn)Json字符串時(shí)如何忽略指定屬性
這篇文章主要介紹了對象轉(zhuǎn)Json字符串時(shí)如何忽略指定屬性,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08SpringBoot啟動報(bào)錯(cuò)屬性循環(huán)依賴報(bào)錯(cuò)問題的解決
這篇文章主要介紹了SpringBoot啟動報(bào)錯(cuò)屬性循環(huán)依賴報(bào)錯(cuò)問題的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-05-05Struts1教程之ActionMapping_動力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了Struts1教程之ActionMapping,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09詳解JAVA使用Comparator接口實(shí)現(xiàn)自定義排序
這篇文章主要介紹了JAVA使用Comparator接口實(shí)現(xiàn)自定義排序,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03