首頁 > Java > java教程 > SpringBoot啟動速度慢的原因是什麼

SpringBoot啟動速度慢的原因是什麼

WBOY
發布: 2023-05-17 11:01:26
轉載
4005 人瀏覽過

    SpringBoot啟動速度慢的原因

    Spring Boot的架構如此普遍,以至於不掌握它的話,有時您不好意思說您從事Java工作。可是它火歸火,也有一些小問題需要咱們去注意。

    如果是單體項目,並且在啟動速度方面沒有任何要求,那麼請忽略。

    下面進入主題,在什麼情況下spring boot的專案啟動會變慢呢

    #前提條件

    啟動專案的機器硬體配置不能拖後腿,否則你說項目啟動慢,專案還覺得機器不行呢…

    例如網絡,記憶體大小,CPU核心數等,不要求太高,至少也要夠用吧

    拋開各種人為因素,例如各種連接時間較長,其他元件啟動較慢導致等待…

    原因一

    專案中使用的無用配置太多。例如在一個最簡單的web中,你還加入了其他各種maven配置,並且將他們配置到專案中(只是比較誇張的例子,這些配置加入都不用),然後專案本身也不懂,既然你配置了,那就加載唄。

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

    原因二

    spring boot的自動設定。儘管自動配置是Spring Boot的亮點,但其也是導致啟動時間緩慢的弊端。

    沒辦法,通常好用功能全的東西,總是會在某些地方有缺陷。

    上面說到無用的配置多,這裡要說的就是spring boot它自己組裝的東西太多。

    你可以看到在spring boot的相關jar包裡,都存放著spring.factories的文件,進去一看,大部分都是寫了很多的類,它是實現spring boot自動裝配的核心之一。

    但是你仔細觀察會發現,其實有很多類,你可能完全不用。

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

    原因三

    專案精簡程度不夠。現在比較流行微服務的概念,我認為它的概念核心意義即為精簡,單一,多數需要強調啟動速度的地方也多是出自微服務的專案中。

    一個微服務專案中,最好是在10秒內能夠啟動完畢。但是多數是做不到的,原因在於專案分割的還不夠細。

    你說一個介面啟動快,還是10個快,或更多,答案很明顯。很多專案做到了大而全,所謂大而全就是功能很多,配置很齊全,各種可以擴展配置等,全面的不行不行的,但這意味著什麼,你的配置多,有用沒用先不管,至少需要編譯和載入的類別檔案都會多出很多來,你說要這樣的專案能啟動快,怎麼啟動快呢?

    解決方法

    • 檢查maven中是否無用的依賴太多

    • 比較複雜,使用spring-boot-maven插件debug啟動,查看該專案中,使用了哪些配置,哪些配置沒用,然後在啟動類中直接註明只啟動使用了的類,並且刪掉@SpringBootApplication註解,手動填上@Configuration和@Import註解,並在@Import註解中加上那些配置的類別。

    • 更換一些配置更快的依賴。例如,你使用A資料庫連線池,功能全,配置多,但速度較慢,但是其實B連線池也能滿足專案需求,但是功能相對較少,所以配置也少,啟動更快,你是不是需要考A和B應該選一個。

    • 分割出更精簡的專案來獨自運行,大而全意味著多而不精,精簡意味著少但是精通,它們速度,不言而喻。

    如何提高SpringBoot應用的啟動速度

    縮小@ComponentScan和@SpringBootApplication掃描類別的範圍

    2、關閉Spring Boot 的JMX 監控,設定spring.jmx.enabled=false

    3、設定JVM 參數-noverify ,不對類別進行驗證

    4、對非必要啟動時載入的Bean ,延遲載入

    5、使用Spring Boot 的全域懶載入

    6、AOP 切面盡量不使用註解方式,這會導致啟動時掃描全部方法

    7、關閉endpoint 的一些監控功能

    8、排除專案多餘的依賴jar

    9、swagger 掃描介面時,指定只掃描某個路徑下的類別

    10、Feign 用戶端介面的掃描縮小包掃描範圍

    以上是SpringBoot啟動速度慢的原因是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

    相關標籤:
    來源:yisu.com
    本網站聲明
    本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
    熱門教學
    更多>
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板