前幾天棧長分享了一個好玩的框架:一個比Spring Boot快44倍的Java框架!,是否是感受 Spring Boot 略慢?今天講一下 Spring Boot 添加的這個新特性,能夠大大提高 Spring Boot 的啓動速度。java
最近,Spring團隊宣佈在 Spring Boot 2.2+ 中添加了一個重要功能:延遲加載,目前這個版本暫時仍是快照版,不過咱們能夠先了解下怎麼使用這個延遲加載功能。程序員
有點經驗的程序員應該都知道,在 Spring 框架中早已經支持延遲加載功能的,簡單來講就是一個類的實例化,不須要 Spring 容器啓動的時候就開始實例化,而是在第一次須要它的時候再實例化,這樣大大提高了程序啓動速度,也在必定程序上節省了系統資源。spring
在傳統 Spring 項目中咱們是這麼作的:微信
<bean id="testBean" calss="cn.javastack.TestBean" lazy-init="true" />
以上 bean 配置是否是很熟悉?負載均衡
沒錯,加了 lazy-init="true"
表示延遲加載,默認不加爲false,表示容器啓動時當即加載。框架
在 Spring 3.0+ 以後也能夠這麼作:工具
@Lazy public TestBean testBean() { return new TestBean(); }
@Lazy:默認值爲true,表示延遲加載;源碼分析
由上面的例子咱們能夠知道,在任何 Spring Boot 版本中實際上是支持 Bean 的延遲加載的,但這樣是須要咱們手工去配置的,這樣會比較麻煩。ui
在 Spring Boot 2.2+ 中,延期加載將變得更加簡單,有幾下幾種配置方式:code
經過以上幾種方式設置成:true,容器中的 Bean 就將配置成延遲加載。
Spring Boot 項目在 IDE 中再配合 DevTools 工具,可使本發開發環境啓動變得更快,400ms就能夠啓動起來了,大大提升了開發效率。
延遲加載確實能夠大大減小應用程序的啓動時間,還能節省系統資源,那麼問題來了,你可能會問,爲何不默認開啓它呢?爲何還要額外提供一個配置?
聽棧長道來,延遲加載確實有不少好處,但也會形成一些在啓動的時候就能發現而要等到延遲加載才發現的問題,如:內存不足啊、類找不到啊、又或者是配置錯誤引起的系列問題。
還有一個問題就是,由於第一次請求的時候纔去實例化,可能形成第一個請求變慢,響應延遲,體驗不是很好。這樣一來,對負載均衡和自動伸縮方面也會有不利影響。
正如咱們在上面所分析到的,延遲加載確實能夠顯着改善啓動時間,但也有一些明顯的缺點,因此咱們必定當心謹慎的啓用它。或者咱們能夠對項目進行評估下,延遲加載真的對咱們的項目有這麼重要或者急迫麼?
等正式版 Spring Boot 2.2 發佈,棧長給再出一個實戰文章,歡迎關注棧長的微信公衆號:Java技術棧,不要走開。
好了,今天的分享就到這裏,關注Java技術棧微信公衆號,在後臺回覆:boot,獲取棧長整理的更多的 Spring Boot 教程,都是實戰乾貨,如下僅爲部分預覽。
最後,大家是怎麼應用延遲加載功能的,歡迎留言分享~
本文原創首發於公衆號:Java技術棧(id:javastack),關注公衆號在後臺回覆 "boot" 可獲取更多 Spring Boot 教程,轉載請原樣保留本信息。