SpringBoot新特性之全域性懶載入機制

2022-09-29 12:27:11 字數 1779 閱讀 2169

關於延遲載入

在 spring 中,預設情況下所有定的 bean 及其依賴專案都是在應用啟動時建立容器www.cppcns.com上下文是被初始化的。測試**如下:

@slf4j

@configuration

public class democonfig

}啟動應用日誌:

[ main] o.a.c.c.c.[tomcat].[localhost].[/] : initializing spring embedded webapplicationcontext

[ main] w.s.c.servletwebserverapplicationcontext : root webapplicationcontext: initialization c程式設計客棧ompleted in 1193 ms

[ main] c.p.c.globamwqlockl.lazy.config.democonfig : > > > democonfig 被初始化 > > >

如上日誌: 在 tomcat started 之前 democonfig bean 已經被初始化建立。

一般情況程式在啟動時時有大量的 bean 需要初始化,例如 資料來源初始化、快取初始化等導致應用程式啟動非常的慢。在 spring boot 2.2 之前的版本,我們對這些 bean 使用手動增加 「@lazy」 註解,來實現啟動時不初始化,業務程式在呼叫需要時再去初始化,如上**修改為即可:

@lazy

@configuration

public class democonfig {}

為什麼需要全域性懶載入

同上文中提到我們需要手動在 bean 增加 「@lazy」 註解,這就意味著我們僅能對程式中自行實現的 bean 進行新增。但是現在 spring boot 應用中引入了很多第三方 starter ,比如 druid-spring-boot-starter 資料來源注入、spring-boot-starter-data-redis 快取等預設情況下, 引入即注入了相程式設計客棧關 bean 我們無法去修改新增 「@lazy」。

spring boot 2.2 新增全域性懶載入屬性,開啟後全域性 bean 被設定為懶載入,需要時再去建立

spring:

main:

lazy-initialization: true #預設false 關閉

個別 bean 可以通過設定 「@lazy(false)」 排除,設定為啟動時載入

@lazy(false)

@configuration

public class democonfig {}

當然也可以指定規則實現 lazyinitializationexcludefilter 規則實現排除

@bean

lazyinitializationexcludefilter integrationlazyinitexcludefilter()

全域性懶載入的問題

通過設定全域性懶載入,我們可以減少啟動時的建立任務從而大幅度的縮減應用的啟動時間。但全域性懶載入的缺點可以歸納為以下兩點:

總結以上原始碼: spring-boot-course

JDK1 8 新特性(全)

hashmap資料結構 在jdk1.8中對hashmap等map集合的資料結構優化。hashmap資料結構的優化 知識點 1 原來的hashmap採用的資料結構是雜湊表 陣列 鍊錶 hashmap預設大小是16,乙個0 15索引的陣列,2 如何往裡面儲存元素 首先呼叫元素的hashcode 方法,計...

Spring Boot 2 3 新特性優雅停機詳解

先來一段簡單的 如下 restcontroller public class democontroller 當我們流量請求到此介面執行業務邏輯的時候,若服務端此時執行關機 kill spring boot 預設情況會直接關閉容器 tomcat 等 導致此業務邏輯執行失敗。在一些業務場景下 會出現資料...

socket新特性之SO REUSEPORT

翻譯原文 linux kernel 3.9中合併了tcp udp的so reuseport特性。允許多個程序 或者執行緒 繫結同乙個埠 int sfd socket domain,socktype,0 int optval 1 setsockopt sfd,sol socket,so reusepo...