欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

關(guān)于SpringBoot啟動(dòng)速度慢的原因總結(jié)

 更新時(shí)間:2023年05月05日 09:20:42   作者:wwjjhh102956  
這篇文章主要介紹了關(guān)于SpringBoot啟動(dòng)速度慢的原因總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

SpringBoot啟動(dòng)速度慢的原因

現(xiàn)在spring boot的架構(gòu)可以說(shuō)是非常流行,不會(huì)你都不好意思說(shuō)你是做java的。可是它火歸火,也有一些小問(wèn)題需要咱們?nèi)プ⒁狻?/p>

如果是單體項(xiàng)目,并且在啟動(dòng)速度方面沒(méi)有任何要求,那么請(qǐng)忽略。

下面進(jìn)入主題,在什么情況下spring boot的項(xiàng)目啟動(dòng)會(huì)變慢呢

前提條件

啟動(dòng)項(xiàng)目的機(jī)器硬件配置不能拖后腿,否則你說(shuō)項(xiàng)目啟動(dòng)慢,項(xiàng)目還覺(jué)得機(jī)器不行呢…

比如網(wǎng)絡(luò),內(nèi)存大小,CPU核心數(shù)等,不要求太高,至少也要夠用吧

拋開(kāi)各種人為因素,例如各種連接時(shí)間較長(zhǎng),其他組件啟動(dòng)較慢導(dǎo)致等待…

原因一

項(xiàng)目中使用的無(wú)用配置太多。例如在一個(gè)最簡(jiǎn)單的web中,你還加入了其他各種maven配置,并且將他們配置到項(xiàng)目中(只是比較夸張的例子,這些配置加入都不用),然后項(xiàng)目本身也不懂,既然你配置了,那就加載唄。

一個(gè)花0.1秒,10個(gè)就1秒,100個(gè)就10秒了…以此類推,這一點(diǎn)就是最容易想明白的地方了。

原因二

spring boot的自動(dòng)配置。自動(dòng)配置是spring boot的一個(gè)特色,但是也是它啟動(dòng)慢的一個(gè)弊病。

沒(méi)辦法,通常好用功能全的東西,總會(huì)在一些地方上有缺陷。

上面說(shuō)到無(wú)用的配置多,這里要說(shuō)的就是spring boot它自己裝配的東西太多。

你可以看到在spring boot的相關(guān)jar包里,都存放著spring.factories的文件,進(jìn)去一看,大部分都是寫(xiě)了很多的類,它是實(shí)現(xiàn)spring boot自動(dòng)裝配的核心之一。

但是你仔細(xì)觀察會(huì)發(fā)現(xiàn),其實(shí)有很多類,你可能完全不用。

但有什么辦法呢,不管你用不用,至少它都會(huì)給你檢查一遍,這不也是花時(shí)間的地方嗎?

原因三

項(xiàng)目精簡(jiǎn)程度不夠?,F(xiàn)在比較流行微服務(wù)的概念,我認(rèn)為它的概念核心含義即為精簡(jiǎn),單一,并且多數(shù)需要強(qiáng)調(diào)啟動(dòng)速度的地方也多是出自微服務(wù)的項(xiàng)目中。

一個(gè)微服務(wù)項(xiàng)目中,最好是在10秒以內(nèi)能夠啟動(dòng)完畢。但是多數(shù)是做不到的,原因在于項(xiàng)目拆分的還不夠細(xì)。

你說(shuō)一個(gè)接口啟動(dòng)快,還是10個(gè)快,或是更多,答案很明顯。很多項(xiàng)目做到了大而全,所謂大而全就是功能很多,配置很齊全,各種可以擴(kuò)展配置等,全面的不行不行的,但這意味著什么,你的配置多,有用沒(méi)用先不管,至少需要編譯和加載的類文件都會(huì)多出很多來(lái),你說(shuō)要這樣的項(xiàng)目能啟動(dòng)快,怎么能啟動(dòng)快呢?

解決方法

  • 檢查maven中是否無(wú)用的依賴太多
  • 比較復(fù)雜,使用spring-boot-maven插件debug啟動(dòng),查看該項(xiàng)目中,使用了哪些配置,哪些配置沒(méi)用,然后在啟動(dòng)類中直接注明只啟動(dòng)使用了的類,并且刪掉@SpringBootApplication注解,手動(dòng)填上@Configuration和@Import注解,并在@Import注解中加上那些配置的類。
  • 更換一些配置更快的依賴。例如,你使用A數(shù)據(jù)庫(kù)連接池,功能全,配置多,但速度較慢,但是其實(shí)B連接池也能滿足項(xiàng)目需求,但是功能相對(duì)較少,所以配置也少,啟動(dòng)更快,你是不是需要考A和B應(yīng)該選一個(gè)。
  • 拆分出更精簡(jiǎn)的項(xiàng)目來(lái)獨(dú)自運(yùn)行,大而全意味著多而不精,精而簡(jiǎn)意味著少但是精通,它們速度,不言而喻。

如何提高SpringBoot應(yīng)用的啟動(dòng)速度

1、減少@ComponentScan @SpringBootApplication 掃描類時(shí)候的范圍

2、關(guān)閉 Spring Boot 的 JMX 監(jiān)控,設(shè)置 spring.jmx.enabled=false

3、設(shè)置 JVM 參數(shù) -noverify ,不對(duì)類進(jìn)行驗(yàn)證

4、對(duì)非必要啟動(dòng)時(shí)加載的 Bean ,延遲加載

5、使用 Spring Boot 的全局懶加載

6、AOP 切面盡量不使用注解方式,這會(huì)導(dǎo)致啟動(dòng)時(shí)掃描全部方法

7、關(guān)閉 endpoint 的一些監(jiān)控功能

8、排除項(xiàng)目多余的依賴 jar

9、swagger 掃描接口時(shí),指定只掃描某個(gè)路徑下的類

10、Feign 客戶端接口的掃描縮小包掃描范圍

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

  • springboot整合cxf發(fā)布webservice以及調(diào)用的方法

    springboot整合cxf發(fā)布webservice以及調(diào)用的方法

    這篇文章主要介紹了springboot整合cxf發(fā)布webservice以及調(diào)用的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • java 異常的實(shí)例詳解

    java 異常的實(shí)例詳解

    這篇文章主要介紹了java 異常的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文大家能徹底掌握java異常的使用方法,需要的朋友可以參考下
    2017-09-09
  • SpringBoot配置文件導(dǎo)入方法詳細(xì)講解

    SpringBoot配置文件導(dǎo)入方法詳細(xì)講解

    Spring Boot雖然是Spring的衍生物, 但默認(rèn)情況下Boot是不能直接使用Spring的配置文件的, 我們可以通過(guò)兩種方式導(dǎo)入Spring的配置
    2022-10-10
  • 使用javassist動(dòng)態(tài)生成類的配置代碼

    使用javassist動(dòng)態(tài)生成類的配置代碼

    Javassist它是一個(gè)用 Java 編輯字節(jié)碼的類庫(kù),它使 Java 程序能夠在運(yùn)行時(shí)定義新類,并在 JVM 加載時(shí)修改類文件,本文給大家介紹使用javassist動(dòng)態(tài)生成類的實(shí)例代碼,感興趣的朋友一起看看吧
    2022-09-09
  • Clojure?與Java對(duì)比少數(shù)據(jù)結(jié)構(gòu)多函數(shù)勝過(guò)多個(gè)單獨(dú)類的優(yōu)點(diǎn)

    Clojure?與Java對(duì)比少數(shù)據(jù)結(jié)構(gòu)多函數(shù)勝過(guò)多個(gè)單獨(dú)類的優(yōu)點(diǎn)

    這篇文章主要介紹了Clojure?與Java對(duì)比少數(shù)據(jù)結(jié)構(gòu)多函數(shù)勝過(guò)多個(gè)單獨(dú)類的優(yōu)點(diǎn),在Clojure中,我們一次又一次地使用相同的數(shù)據(jù)結(jié)構(gòu),并在其上運(yùn)行許多函,更多相關(guān)介紹需要的朋友可以參考一下下面文章內(nèi)容
    2022-06-06
  • java實(shí)現(xiàn)對(duì)map的字典序排序操作示例

    java實(shí)現(xiàn)對(duì)map的字典序排序操作示例

    這篇文章主要介紹了java實(shí)現(xiàn)對(duì)map的字典序排序操作,結(jié)合實(shí)例形式分析了java參照微信官網(wǎng)算法實(shí)現(xiàn)的字典序排序操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-07-07
  • java WebSocket實(shí)現(xiàn)聊天消息推送功能

    java WebSocket實(shí)現(xiàn)聊天消息推送功能

    這篇文章主要為大家詳細(xì)介紹了java WebSocket實(shí)現(xiàn)聊天消息推送功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Java多線程、進(jìn)度條實(shí)現(xiàn)賽馬實(shí)驗(yàn)的示例代碼

    Java多線程、進(jìn)度條實(shí)現(xiàn)賽馬實(shí)驗(yàn)的示例代碼

    這篇文章主要介紹了Java多線程、進(jìn)度條實(shí)現(xiàn)賽馬實(shí)驗(yàn)的示例代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • Spring?Cloud詳細(xì)講解zuul集成Eureka流程

    Spring?Cloud詳細(xì)講解zuul集成Eureka流程

    這篇文章主要介紹了Spring?Cloud?zuul集成Eureka,Eureka?Client中內(nèi)置一個(gè)負(fù)載均衡器,用來(lái)進(jìn)行基本的負(fù)載均衡,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • 最新評(píng)論