Spring Boot啟動速度慢的原因總結
阿新 • • 發佈:2018-12-27
現在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自動裝配的核心之一。但是你仔細觀察會發現,其實有很多類,你可能完全不用。但有什麼辦法呢,不管你用不用,至少它都會給你檢查一遍,這不也是花時間的地方嗎?
原因三
專案精簡程度不夠
解決方法
- 檢查maven中是否無用的依賴太多
- 比較複雜,使用spring-boot-maven外掛debug啟動,檢視該專案中,使用了哪些配置,哪些配置沒用,然後在啟動類中直接註明只啟動使用了的類,並且刪掉
@SpringBootApplication
@Configuration
和@Import
註解,並在@Import
註解中加上那些配置的類。 - 更換一些配置更快的依賴。例如,你使用A資料庫連線池,功能全,配置多,但速度較慢,但是其實B連線池也能滿足專案需求,但是功能相對較少,所以配置也少,啟動更快,你是不是需要考A和B應該選一個。
- 拆分出更精簡的專案來獨自執行,大而全意味著多而不精,精而簡意味著少但是精通,它們速度,不言而喻。
此次分享就到這裡,歡迎大家的討論。