深入理解 Spring Boot 應用的生命周期:從啟動到關閉的全流程解析

引言

Spring Boot 是當今 Java 開發中最流行的框架之一,它以簡化配置和快速開發著稱。然而,要真正掌握 Spring Boot,理解其應用的生命周期是至關重要的。本文將深入探討 Spring Boot 應用的生命周期,從啟動到關閉的各個階段,并介紹如何通過擴展點自定義應用行為。


1. Spring Boot 應用的生命周期概述

Spring Boot 應用的生命周期可以分為以下三個階段:

  1. 啟動階段:從應用啟動到完全運行。
  2. 運行階段:應用正常運行,處理請求和執行業務邏輯。
  3. 關閉階段:從接收到關閉信號到應用完全終止。

每個階段都有其獨特的擴展點和事件,開發者可以通過這些機制對應用的行為進行精細控制。


2. 啟動階段

啟動階段是 Spring Boot 應用生命周期的第一個階段,主要包括以下步驟:

2.1 啟動類加載

Spring Boot 應用的入口是帶有 @SpringBootApplication 注解的主類。通過調用 SpringApplication.run() 方法,應用啟動流程正式開始。

2.2 初始化 Spring 上下文

Spring Boot 會初始化 ApplicationContext,加載配置文件、Bean 定義以及其他必要的資源。

2.3 執行 ApplicationRunnerCommandLineRunner

如果應用中有實現 ApplicationRunnerCommandLineRunner 接口的 Bean,它們會在應用啟動后執行。這兩個接口非常適合用于執行一些初始化任務。

@Component
public class MyApplicationRunner implements ApplicationRunner {@Overridepublic void run(ApplicationArguments args) throws Exception {System.out.println("Application started with arguments: " + args.getOptionNames());}
}
2.4 啟動內嵌的 Web 服務器

如果應用是一個 Web 應用,Spring Boot 會啟動內嵌的 Tomcat、Jetty 或 Undertow 服務器。

2.5 應用啟動完成

當應用完全啟動并準備好接收請求時,Spring Boot 會觸發 ApplicationReadyEvent 事件。


3. 運行階段

在運行階段,應用處于正常工作狀態,處理用戶請求、執行業務邏輯等。開發者可以通過以下方式擴展和監控應用行為:

3.1 自定義健康檢查

通過實現 HealthIndicator 接口,開發者可以自定義應用的健康檢查邏輯。

@Component
public class MyHealthIndicator implements HealthIndicator {@Overridepublic Health health() {return Health.up().withDetail("Custom", "Everything is OK").build();}
}
3.2 自定義性能指標

使用 Micrometer 或 Spring Boot Actuator 提供的 API,開發者可以自定義應用的性能指標。


4. 關閉階段

關閉階段是 Spring Boot 應用生命周期的最后一個階段,主要包括以下步驟:

4.1 接收關閉信號

當應用接收到關閉信號(例如,通過 SIGTERMSIGINT),Spring Boot 開始關閉流程。

4.2 觸發 ContextClosedEvent 事件

Spring 上下文關閉時,會觸發 ContextClosedEvent 事件。

4.3 銷毀 Bean

Spring 容器會調用所有 Bean 的 @PreDestroy 方法或實現 DisposableBean 接口的 destroy() 方法。

@Component
public class MyBean {@PreDestroypublic void cleanup() {System.out.println("Bean is being destroyed...");}
}
4.4 關閉內嵌的 Web 服務器

如果應用是一個 Web 應用,內嵌的服務器會被關閉。

4.5 應用完全關閉

應用進程終止。


5. Spring Boot 生命周期中的關鍵擴展點

Spring Boot 提供了多個擴展點,允許開發者在應用生命周期的不同階段執行自定義邏輯。

5.1 啟動階段擴展點
  • ApplicationRunnerCommandLineRunner:在應用啟動后執行自定義邏輯。
  • ApplicationListener:監聽 Spring Boot 的生命周期事件。
5.2 運行階段擴展點
  • 自定義健康檢查:通過實現 HealthIndicator 接口。
  • 自定義性能指標:使用 Micrometer 或 Spring Boot Actuator。
5.3 關閉階段擴展點
  • @PreDestroy 注解:在 Bean 銷毀前執行清理邏輯。
  • 實現 DisposableBean 接口:在 Bean 銷毀時執行清理邏輯。
  • 監聽 ContextClosedEvent 事件:在 Spring 上下文關閉時執行自定義邏輯。

6. Spring Boot 生命周期中的事件

Spring Boot 在生命周期中會發布一系列事件,開發者可以通過監聽這些事件來執行自定義邏輯。常見的事件包括:

  • ApplicationStartingEvent:應用啟動時觸發。
  • ApplicationEnvironmentPreparedEvent:環境準備完成后觸發。
  • ApplicationContextInitializedEvent:應用上下文初始化完成后觸發。
  • ApplicationPreparedEvent:應用準備完成后觸發。
  • ApplicationStartedEvent:應用啟動后觸發。
  • ApplicationReadyEvent:應用完全啟動并準備好接收請求時觸發。
  • ContextClosedEvent:應用上下文關閉時觸發。

7. 總結

Spring Boot 應用的生命周期涵蓋了從啟動到關閉的整個過程。通過理解生命周期的各個階段及其擴展點,開發者可以更好地控制應用的行為,優化啟動性能,并在適當的時候釋放資源。無論是通過 ApplicationRunner 執行初始化任務,還是通過 @PreDestroy 清理資源,Spring Boot 都提供了豐富的機制來滿足開發者的需求。

掌握 Spring Boot 的生命周期,不僅有助于開發高效、穩定的應用,還能提升對框架的深入理解。希望本文能為你提供有價值的參考,助你在 Spring Boot 開發中游刃有余!


在這里插入圖片描述


參考資料

  • Spring Boot 官方文檔
  • Spring Framework 官方文檔

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/72965.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/72965.shtml
英文地址,請注明出處:http://en.pswp.cn/web/72965.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

期刊分區表2025年名單下載(經濟學、管理學)

2025年期刊分區表包括SCIE、SSCI、A&HCI、ESCI和OAJ,共設置了包括自然科學、社會科學和人文科學在內的21個大類 本次分享的是期刊分區表2025年名單經濟學類、管理學類,一共7631025條 一、數據介紹 數據名稱:期刊分區表2025年名單 數據…

夢回杭州...

她對我說,煙雨中的西湖更別有情趣,我也懷著對‘人間天堂’的憧憬踏上了向往之旅。第一次親密接觸沒有感覺中那么好,現在想起來是那時的人和心情都沒能安靜下來,去慢慢品味它的美。 六下杭州,親歷每一片風景&#xff0c…

深度優先搜索(DFS)完全解析:從原理到 Java 實戰

深度優先搜索(DFS)完全解析:從原理到 Java 實戰 TOC 作為一名程序員,你是否遇到過需要在復雜的圖結構中尋找路徑、檢測環,或者進行樹遍歷的問題?深度優先搜索(Depth-First Search, DFS&#xf…

【人工智能】如何理解transformer中的token?

如何理解transformer中的token? **一、Token在Transformer中的作用****二、文本分詞的常見方法****1. 基于詞典的分詞(Dictionary-based Tokenization)****2. 子詞分詞(Subword Tokenization)****(1) WordPiece算法****(2) BPE&a…

AI風向標《AI與視頻制作全攻略:從入門到精通實戰課程》

課程信息 AI風向標《AI與視頻制作全攻略:從入門到精通實戰課程》,夸克網盤和百度網盤課程。 課程介紹 《AI與視頻制作全攻略:從入門到精通實戰課程》是一套全面融合AI技術與視頻制作的實戰課程,旨在幫助創作者從基礎軟件使用到高級視頻剪輯…

mayfly-go開源的一站式 Web 管理平臺

mayfly-go 是一款開源的一站式 Web 管理平臺,旨在通過統一的界面簡化 Linux 服務器、數據庫(如 MySQL、PostgreSQL、Redis、MongoDB 等)的運維管理。以下從多個維度對其核心特性、技術架構、應用場景及生態進行詳細解析: 一、核心…

車輛模型——運動學模型

文章目錄 約束及系統移動機器人運動學模型(Kinematic Model)自行車模型含有加速度 a a a 的自行車模型系統偏差模型 在機器人的研究領域中,移動機器人的系統建模與分析是極為關鍵的基礎環節,本文以非完整約束的輪式移動機器人為研…

go命令使用

查看配置信息 go env配置go國內源 export GO111MODULEon export GOPROXYhttps://goproxy.cn測試 go install github.com/jesseduffield/lazydockerlatesthttps://github.com/jesseduffield/lazydocker

Chrome-Edge-IDEA-Win 常用插件-工具包

Chrome-Edge-IDEA-Win 常用插件-工具包 Chrome-Edge-IDEA-Win 常用插件-工具包谷歌插件chropathJSONViewOctotree - GitHub code treeXPath Helper書簽側邊欄篡改猴Print Edit WEEdge瀏覽器插件IDEA插件CodeGlance Pro 代碼迷你縮放圖插件Alibaba Cloud ToolkitAlibaba Java Co…

西門子V90伺服系統介紹

深入淺出地了解V90伺服驅動系統的核心特性和優勢,掌握其自動優化功能,使設備獲得更高的動態性能;同時,了解其自動抑制機械諧振頻率的特性,有助于在實際應用中減少機械振動和噪音。 方便快捷地熟悉V90的使用方式。通過伺…

【FastGPT】利用知識庫創建AI智能助手

【FastGPT】利用知識庫創建AI智能助手 摘要創建知識庫上傳文檔創建應用準備提示詞準備開場白關聯知識庫AI回答效果 摘要 關于FastGPT的部署,官方提供了docker-compose方式的部署文檔,如果使用的是podman和podman-compose的同學,可以參考這篇…

最新!Ubuntu Docker 安裝教程

源自: AINLPer(每日干貨分享!!) 編輯: ShuYini 校稿: ShuYini 時間: 2025-3-1 更多:>>>>大模型/AIGC、學術前沿的知識分享! 看到很多部署大模型的時候,都是基于docker安裝部署的。…

html5炫酷3D立體文字效果實現詳解

炫酷3D立體文字效果實現詳解 這里寫目錄標題 炫酷3D立體文字效果實現詳解項目概述技術實現要點1. 基礎布局設置2. 動態背景效果3. 文字漸變效果4. 立體陰影效果5. 懸浮動畫效果 技術難點及解決方案1. 文字漸變動畫2. 立體陰影效果3. 性能優化 瀏覽器兼容性總結 項目概述 在這個…

電腦如何設置幾分鐘后自動關機

摘要:本文提供Windows、macOS和Linux系統設置定時自動關機的詳細方法。 目錄 一、Windows系統設置方法 設置定時關機 取消關機計劃 二、macOS系統設置方法 設置定時關機取消關機計劃 三、Linux系統設置方法 設置定時關機 取消關機計劃 四、注意事項五、擴展&#x…

Android音視頻多媒體開源庫基礎大全

從事音視頻開發工作,需要了解哪些常見的開源庫,從應用到底軟系統,整理了九大類,這里一次幫你總結完。 包含了應用層的MediaRecorder、surfaceView,以及常見音視頻處理庫FFmpeg和OpenCV,還有視頻渲染和音頻…

若依前端框架增刪改查

1.下拉列表根據數據庫加載 這個是用來查詢框 綁定了 change 事件來處理站點選擇變化后的查詢邏輯。 <el-form-item label"站點選擇" prop"stationId" v-has-permi"[ch:m:y]"><el-select v-model"queryParams.stationId" pl…

Java 第十一章 GUI編程(3)

目錄 內部類 內部類定義 內部類的特點 匿名內部類 格式&#xff1a; 內部類的意義 實例 內部類 ● 把類定義在另一個類的內部&#xff0c;該類就被稱為內部類。 ● 如果在類 Outer 的內部再定義一個類 Inner&#xff0c;此時類 Inner 就稱為內部類 &#xff08;或稱為嵌…

Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多變量回歸預測

Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多變量回歸預測 目錄 Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多變量回歸預測預測效果基本介紹程序設計參考資料 預測效果 基本介紹 Transformer-GRU、Transformer、CNN-GRU、GRU、CNN五模型多變量回歸預…

3DMAX曲線生成器插件CurveGenerator使用方法

1. 腳本功能簡介 3DMAX曲線生成器插件CurveGenerator是一個用于 3ds Max 的樣條線生成工具&#xff0c;用戶可以通過簡單的UI界面輸入參數&#xff0c;快速生成多條樣條線。每條樣條線的高度值隨機生成&#xff0c;且可以自定義以下參數&#xff1a; 頂點數量&#xff1a;每條…

LiteratureReading:[2023] GPT-4: Technical Report

文章目錄 一、文獻簡明&#xff08;zero&#xff09;二、快速預覽&#xff08;first&#xff09;1、標題分析2、作者介紹3、引用數4、摘要分析&#xff08;1&#xff09;翻譯&#xff08;2&#xff09;分析 5、總結分析&#xff08;1&#xff09;翻譯&#xff08;2&#xff09;…