Spring Boot 2.2 增加了一個新功能,啟動飛起~

来源:https://www.cnblogs.com/javastack/archive/2019/04/09/10674750.html
-Advertisement-
Play Games

前幾天棧長分享了一個好玩的框架: "一個比Spring Boot快44倍的Java框架!" ,是不是感覺 Spring Boot 略慢?今天講一下 Spring Boot 添加的這個新特性,可以大大提升 Spring Boot 的啟動速度。 最近,Spring團隊宣佈在 Spring Boot 2. ...


前幾天棧長分享了一個好玩的框架:一個比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 教程,轉載請原樣保留本信息。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言: 相信大家都打開過層級很多很多的文件夾。如果把第一個文件夾看作是樹的根節點的話,下麵的子文件夾就可以看作一個子節點。不過最終我們尋找的還是文件夾中的文件,文件可以看做是葉子節點。下麵我們介紹一種模式,與這種樹級結構息息相關。當然,今天的主角是HashMap。接下來我們一起來看HashMap中到 ...
  • 一、引言 我們都知道,資料庫連接是很珍貴的資源,頻繁的開關資料庫連接是非常浪費伺服器的CPU資源以及記憶體的,所以我們一般都是使用資料庫連接池來解決這一問題,即創造一堆等待被使用的連接,等到用的時候就從池裡取一個,不用了再放回去,資料庫連接在整個應用啟動期間,幾乎是不關閉的,除非是超過了最大閑置時間。 ...
  • 歡迎大家的不嫌棄,繼續和我一起學習設計模式。上一篇已經把裝飾者模式的類圖有了一個整體的出來,末尾說的去想想實現的代碼,你實踐了嗎?是什麼原因讓你實踐了呢?又是什麼原因讓你沒有動手呢?沒動手,可能是思路還不夠明確是嗎? 接下來,我們繼續學習。通過代碼實現的方式,來搞定裝飾者模式。 寫下代碼 動手的時候 ...
  • JAVA的主要優勢:跨平臺性,可以在Linux,windows,mac三個系統上運行。 跨平臺的核心:JAVA虛擬機--JVM 原理就是將Java語言在這個系統上翻譯。JAVA在jvm上運行,jvm進行翻譯。 JRE:java的運行環境,包括JVM和所需要的核心類。 JDK:java程式的開發包,包 ...
  • 背景 《SRE Google運維解密》里提到SRE自動化系統的一個bug導致幾乎所有的數據中心機器被成功下線併進行硬碟擦除。當然這本書出版之後又業界也進行了很多的演進。在我們團隊現在很難發生這樣的事情。因為團隊內人人要遵循的一個設計原則是:原則上禁止批量操作。如需批量,需要有審核流程。批量設置上限。 ...
  • 前言 說到分散式緩存,可能大多數人腦海浮現的就是redis了,為什麼redis能夠在競爭激烈的緩存大戰中脫穎而出呢?原因無非有一下幾點:性能好,豐富的特性跟數據結構,api操作簡單。但是用的人多了,就會出現很多不規範或者疏忽的地方,嚴重的時候甚至會導致生產事故,所以我們有必要來聊聊在Redis使用過 ...
  • 本文將介紹如何使用Docker Compose搭建Istio。Istio號稱支持多種平臺(不僅僅Kubernetes)。然而,官網上非基於Kubernetes的教程仿佛不是親兒子,寫得非常隨便,不僅缺了一些內容,而且還有坑。本文希望能補實這些內容。我認為在學習Istio的過程中,相比於Kuberne ...
  • 前言 如今不管是在面試還是在我們的工作中,OOM總是不斷的出現在我們的視野中,所以我們有必要去瞭解一下導致OOM的原因以及一些基本的調整方法,大家可以通過下麵的事例來瞭解一下什麼樣的代碼會導致OOM,幫助我們以後在工作中能夠通過異常信息來判斷是JVM裡面哪個區域出現了問題。 先介紹一下筆者的相關編碼 ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...