前幾天棧長分享了一個好玩的框架:一個比Spring Boot快44倍的Java框架!,是不是感覺 Spring Boot 略慢?今天講一下 Spring Boot 添加的這個新特性,可以大大提升 Spring Boot 的啟動速度。
最近,Spring團隊宣布在 Spring Boot 2.2+ 中添加了一個重要功能:延遲加載,目前這個版本暫時還是快照版,不過我們可以先了解下怎么使用這個延遲加載功能。
延遲加載是什么意思?
有點經驗的程序員應該都知道,在 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如何開啟?
由上面的例子我們可以知道,在任何 Spring Boot 版本中其實是支持 Bean 的延遲加載的,但這樣是需要我們手工去配置的,這樣會比較麻煩。
在 Spring Boot 2.2+ 中,延期加載將變得更加簡單,有幾下幾種配置方式:
- 參數:spring.main.lazy-initialization
- 類:SpringApplication
- 類:SpringApplicationBuilder
通過以上幾種方式設置成:true,容器中的 Bean 就將配置成延遲加載。
Spring Boot 項目在 IDE 中再配合 DevTools 工具,可以使本發開發環境啟動變得更快,400ms就可以啟動起來了,大大提高了開發效率。
延遲加載有沒有缺點?
延遲加載確實可以大大減少應用程序的啟動時間,還能節省系統資源,那么問題來了,你可能會問,為什么不默認開啟它呢?為什么還要額外提供一個配置?
聽棧長道來,延遲加載確實有很多好處,但也會造成一些在啟動的時候就能發現而要等到延遲加載才發現的問題,如:內存不足啊、類找不到啊、又或者是配置錯誤引發的系列問題。
還有一個問題就是,因為第一次請求的時候才去實例化,可能造成第一個請求變慢,響應延遲,體驗不是很好。這樣一來,對負載均衡和自動伸縮方面也會有不利影響。
結束語
正如我們在上面所分析到的,延遲加載確實可以顯着改善啟動時間,但也有一些明顯的缺點,所以我們一定小心謹慎的啟用它。或者我們可以對項目進行評估下,延遲加載真的對我們的項目有這么重要或者急迫么?
等正式版 Spring Boot 2.2 發布,棧長給再出一個實戰文章,歡迎關注棧長的微信公眾號:Java技術棧,不要走開。
好了,今天的分享就到這里,關注Java技術棧微信公眾號,在后台回復:boot,獲取棧長整理的更多的 Spring Boot 教程,都是實戰干貨,以下僅為部分預覽。
- Spring Boot 讀取配置的幾種方式
- Spring Boot 如何做參數校驗?
- Spring Boot 最核心的 25 個注解!
- Spring Boot 2.x 啟動全過程源碼分析
- Spring Boot 2.x 新特性總結及遷移指南
- ……
最后,你們是怎么應用延遲加載功能的,歡迎留言分享~
本文原創首發於微信公眾號:Java技術棧(id:javastack),關注公眾號在后台回復 "boot" 可獲取更多 Spring Boot 教程,轉載請原樣保留本信息。