SpringBoot重啟后,第一次請求接口請求慢的問題及解決
1、DispatcherServlet默認是懶加載
即工程啟動的時候,Applicationcontext會將所有的bean加載到容器,但是DispatcherServlet是沒有加載的,只有第一次訪問的時候才會加載
場景一
DispatcherServlet懶加載情況,啟動的時候如下圖

只有一個ApplicationContext的初始化,此時并沒有DispatcherServlet的初始化,接下來我們進行一次接口調用
如下圖:

發(fā)現(xiàn)在進行接口調用的時候,才初始化了DispatcherServlet,接下來我們再進行一次接口調用
如下圖:

此時,直接進行方法的調用和返回。
場景二
spring.mvc.servlet.load-on-startup=1
DispatcherServlet關閉懶加載,啟動的時候如下圖:

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

通過上述測試可知,通過配置 spring.mvc.servlet.load-on-startup=1 關閉DispatcherServlet懶加載
使第一次接口訪問的時候直接進行方法的調用,提高速度
2、隨機數(shù)生成慢的原因和解決方案
Java隨機數(shù)生成依賴熵源(Entropy Source)
默認的阻塞型的 /dev/random熵源可能導致阻塞
而換一個非阻塞的 /dev/urandom的熵源就可以了
解決方法
- 臨時、方便
以這種方式運行jar包
java -Djava.security.egd=file:/dev/./urandom -jar XXX.jar XXX
- 永久
進入你的JAVA_HOME的jre目錄下找到并vim編輯這個文件:
$JAVA_HOME/jre/lib/security/java.security
- 找到:
securerandom.source=file:/dev/random 這一行
- 改之前:
securerandom.source=file:/dev/random
- 改為:
securerandom.source=file:/dev/urandom
3、進行異步處理
提高整體的響應時間
4、加入緩存
例如熱點數(shù)據的預加載等,提高響應時間
5、工程啟動之后
就進行一次訪問
@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));
};
}
}
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Java數(shù)據結構之實現(xiàn)哈希表的分離鏈接法
今天給大家?guī)淼氖顷P于Java數(shù)據結構的相關知識,文章圍繞著Java哈希表的分離鏈接法展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下2021-06-06
詳解用Spring Boot Admin來監(jiān)控我們的微服務
這篇文章主要介紹了用Spring Boot Admin來監(jiān)控我們的微服務,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-08-08
Java多條件判斷場景中規(guī)則執(zhí)行器的設計
近日在公司領到一個小需求,需要對之前已有的試用用戶申請規(guī)則進行拓展。本文去掉if 判斷,試試用一個規(guī)則執(zhí)行器來替代它,感興趣的可以了解一下2021-06-06
Java使用FutureTask實現(xiàn)預加載的示例詳解
基于FutureTask的特性,通??梢允褂肍utureTask做一些預加載工作,比如一些時間較長的計算等,本文就來和大家講講具體實現(xiàn)方法吧,感興趣的可以了解一下2023-06-06
springboot application.yml使用@@pom文件配置問題
這篇文章主要介紹了springboot application.yml使用@@pom文件配置問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07

