日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

启动未初始化小应用程序_SpringBoot详细打印启动时异常堆栈信息

發布時間:2025/4/16 javascript 89 豆豆
生活随笔 收集整理的這篇文章主要介紹了 启动未初始化小应用程序_SpringBoot详细打印启动时异常堆栈信息 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 前言

隨著我們項目的不斷迭代 Bean 的數量會大大增加,如果都在啟動時進行初始化會非常耗時。Spring Boot 允許延遲初始化應用程序, 也就是根據需要初始化 Spring Bean,而不是在 Spring Boot 啟動時創建所有的 Bean。這樣的就可以減少應用程序啟動花費的時間。延遲初始化通常又被稱為“懶加載”。

2. 延遲初始化

Spring Boot 中的延遲初始化可分為全局延遲初始化局部初始化

注意:以下特性在 Spring Boot 2.2.x 中存在

2.1 全局初始化

全局初始化我們可以通過編程的方式來實現,需要我們來改變 Spring Boot Main方法的寫法。

通常我們的 Main 方法是這樣的,注意這里還沒聲明全局懶加載

/** * @author felord.cn * @since 2020/3/31 22:53 */@SpringBootApplicationpublic class DemoSpringbootApplication { @Lazy public static void main(String[] args) { SpringApplication.run(DemoSpringbootApplication.class,args); }}復制代碼

全局懶加載寫法一:

/** * @author felord.cn * @since 2020/3/31 22:53 */@SpringBootApplicationpublic class DemoSpringbootApplication { @Lazy public static void main(String[] args) { SpringApplication sa = new SpringApplication(DemoSpringbootApplication.class); sa.setLazyInitialization(true); sa.run(args); }}復制代碼

全局懶加載寫法二:

/** * @author felord.cn * @since 2020/3/31 22:53 */@SpringBootApplicationpublic class DemoSpringbootApplication { @Lazy public static void main(String[] args) { SpringApplicationBuilder sab = new SpringApplicationBuilder(DemoSpringbootApplication.class); sab.lazyInitialization(true).run(args); }}復制代碼

上面的寫法一和寫法二都是我們通過編程方式定制一些 Spring Boot 特性,大多數都是全局特性。包括本文講述的 “懶加載”。

我們還可以采取更簡單的配置文件(application.properties)的方式來配置延遲初始化:

# 默認是關閉的 falsespring.main.lazy-initialization=true復制代碼

當我們開啟了全局的延遲加載后,在 Web 應用程序中將導致許多與 Web 相關的 Bean 直到收到第一次 HTTP 請求后才被初始化。

控制器

/** * @author felord.cn * @since 2020/3/31 23:31 */@RestController@RequestMappingpublic class FooController { private FooService fooService; public FooController(FooService fooService) { System.out.println("fooController init...") this.fooService = fooService; } @GetMapping("/req") public Map demo() { System.out.println("Preparing HTTP request..."); return fooService.response(); }}復制代碼

服務層

/** * @author felord.cn * @since 2020/3/31 23:36 */@Servicepublic class FooService { public FooService() { System.out.println("fooService init ..."); } public Map response() { Map map = new HashMap<>(); map.put("msg","from fooService"); return map; }}復制代碼

調用 /req 接口后我們發現,不單單 FooController 和 FooService 在第一次調用初始化,連 Spring MVC 核心 DispatcherServlet 都是第一次調用時初始化。

2.2 局部初始化

如果我們不想讓全局延遲初始化作用于個別的 Bean 怎么辦?我們可以在這個 Bean 上聲明注解 @Lazy(value = false) 即可。你可以改寫 2.1 的代碼自己試一試。這個 @Lazy 作用于局部,并通過布爾值 value 來控制是否延遲初始化。情況是這樣的:

  • 當我們聲明全局延遲加載時,@Lazy(value = false)標記的 Bean 會被立即加載。
  • 當我們聲明全局延遲加載時,@Lazy 標記的 Bean 會被延遲加載。

請注意:@Lazy 會影響到 @Configuration 下聲明的 Bean

3. 注意事項

延遲初始化的缺點是,如果錯誤配置的 Bean 是延遲初始化的,則在啟動期間將不再發生故障,并且只有在初始化 Bean 時錯誤才會暴露出來,所以一定要經過嚴格的測試。

同時還必須注意確保 JVM 具有足夠的內存來容納所有應用程序的 Bean,而不僅僅是啟動期間初始化的 Bean。因此建議在啟用延遲初始化之前先對 JVM 的堆大小進行必要的檢測和微調以保證不會溢出。

那些初始化耗時,具有復雜邏輯,而且不是啟動的必要選擇的 Bean 應當被延遲初始化。

4. 總結

今天對 Spring Boot 如何進行延遲初始化進行了講解,同時也說明了一些注意事項。間接地也對 Main 方法的幾種姿勢也進行了展示,希望對你的實際開發有所幫助。關注公眾號:Felordcn 將自動獲取技術干貨資料。

總結

以上是生活随笔為你收集整理的启动未初始化小应用程序_SpringBoot详细打印启动时异常堆栈信息的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。