最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

SpringBoot應(yīng)用程序啟動(dòng)監(jiān)聽功能的常見方法

 更新時(shí)間:2024年05月21日 11:11:45   作者:頑石九變  
應(yīng)用啟動(dòng)監(jiān)聽在?Spring?Boot?和其他框架中扮演著重要的角色,它們的主要作用是在應(yīng)用啟動(dòng)或關(guān)閉時(shí)觸發(fā)特定的操作或任務(wù),本文給大家介紹了SpringBoot應(yīng)用程序啟動(dòng)監(jiān)聽功能的常見方法,需要的朋友可以參考下

一、監(jiān)聽?wèi)?yīng)用啟動(dòng)的常見場(chǎng)景

應(yīng)用啟動(dòng)監(jiān)聽在 Spring Boot 和其他框架中扮演著重要的角色。它們的主要作用是在應(yīng)用啟動(dòng)或關(guān)閉時(shí)觸發(fā)特定的操作或任務(wù)。

以下是一些常見的應(yīng)用啟動(dòng)監(jiān)聽場(chǎng)景:

  1. 初始化操作:在應(yīng)用啟動(dòng)時(shí),你可能需要執(zhí)行一些特定的初始化操作,例如加載配置文件、建立數(shù)據(jù)庫連接池等。通過實(shí)現(xiàn) ApplicationListener 接口或使用 @EventListener 注解,你可以在這些關(guān)鍵時(shí)刻添加自定義邏輯,確保你的應(yīng)用程序能夠正確地啟動(dòng)并運(yùn)行。
  2. 數(shù)據(jù)預(yù)處理:在應(yīng)用啟動(dòng)時(shí),你可能需要進(jìn)行數(shù)據(jù)預(yù)處理,例如清理上一次運(yùn)行遺留的垃圾數(shù)據(jù)或者將常用的數(shù)據(jù)加載到內(nèi)存中。通過實(shí)現(xiàn) CommandLineRunner 或 ApplicationRunner 接口,你可以在應(yīng)用啟動(dòng)后執(zhí)行這些任務(wù)。
  3. 系統(tǒng)通知:當(dāng)應(yīng)用成功啟動(dòng)時(shí),你可以發(fā)送一個(gè)系統(tǒng)通知,例如通過郵件或消息隊(duì)列通知其他系統(tǒng)或管理員。這可以幫助你與其他系統(tǒng)集成,提供統(tǒng)一的監(jiān)控和管理界面。
  4. 健康檢查和監(jiān)控:通過定義健康檢查端點(diǎn)、指標(biāo)收集等功能,你可以對(duì)應(yīng)用進(jìn)行健康檢查和監(jiān)控。這些功能通常由 Spring Boot Actuator 提供支持。通過監(jiān)聽相應(yīng)的事件,你可以在應(yīng)用啟動(dòng)時(shí)啟用或禁用這些功能。
  5. 依賴服務(wù)檢查:在應(yīng)用啟動(dòng)階段,可以檢查依賴服務(wù)(如數(shù)據(jù)庫、消息隊(duì)列、緩存等)是否可用,并在不可用時(shí)采取適當(dāng)?shù)拇胧缪舆t啟動(dòng)或記錄錯(cuò)誤。這有助于確保你的應(yīng)用程序能夠在穩(wěn)定的環(huán)境下正常運(yùn)行。
  6. 動(dòng)態(tài)配置更新:在一些情況下,你需要根據(jù)環(huán)境變量或其他條件來動(dòng)態(tài)更新應(yīng)用的配置。通過監(jiān)聽配置文件的修改事件,你可以在應(yīng)用啟動(dòng)時(shí)重新加載配置,以適應(yīng)不同的環(huán)境或配置變化。
  7. 日志記錄:在應(yīng)用啟動(dòng)過程中,你可能希望記錄一些關(guān)鍵信息,例如啟動(dòng)時(shí)間、版本號(hào)、運(yùn)行環(huán)境等。這將有助于問題排查和審計(jì)工作。
  8. 安全性檢查:在某些情況下,你可能需要在應(yīng)用啟動(dòng)階段執(zhí)行安全性相關(guān)的檢查,例如驗(yàn)證加密密鑰、檢查安全漏洞等。通過監(jiān)聽相應(yīng)的事件,你可以執(zhí)行這些檢查以確保應(yīng)用的安全性。

二、監(jiān)聽?wèi)?yīng)用啟動(dòng)的方法

在 Spring Boot 中,你可以通過實(shí)現(xiàn) ApplicationListener 接口、使用 @EventListener 注解或?qū)崿F(xiàn) CommandLineRunner / ApplicationRunner 接口來創(chuàng)建自定義的啟動(dòng)監(jiān)聽器。這些監(jiān)聽器使得你能夠在應(yīng)用生命周期的關(guān)鍵時(shí)刻執(zhí)行自定義邏輯,從而增強(qiáng)應(yīng)用的可用性、可維護(hù)性和健壯性。

在 Spring Boot 應(yīng)用中,你可以通過實(shí)現(xiàn)特定的接口或使用注解來監(jiān)聽?wèi)?yīng)用的啟動(dòng)和關(guān)閉事件。以下是一些常見的方法:

1)實(shí)現(xiàn) ApplicationListener 接口

你可以創(chuàng)建一個(gè)類來實(shí)現(xiàn) ApplicationListener 接口,并指定要監(jiān)聽的事件類型。例如,要監(jiān)聽?wèi)?yīng)用啟動(dòng)完成事件,你可以這樣做:

import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.stereotype.Component;

@Component
public class MyApplicationListener implements ApplicationListener<ApplicationReadyEvent> {

    @Override
    public void onApplicationEvent(ApplicationReadyEvent event) {
        // 處理應(yīng)用啟動(dòng)完成事件
    }
}

2)使用 @EventListener 注解

在 Spring 4.2 及以上版本中,你可以使用 @EventListener 注解來監(jiān)聽事件,而無需實(shí)現(xiàn) ApplicationListener 接口。例如:

import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Component;

@Component
public class MyEventListener {

    @EventListener(ApplicationReadyEvent.class)
    public void onApplicationReadyEvent(ApplicationReadyEvent event) {
        // 處理應(yīng)用啟動(dòng)完成事件
    }
}

3)使用 ApplicationRunner 或 CommandLineRunner 接口

雖然這不是嚴(yán)格意義上的監(jiān)聽器,但 ApplicationRunner 和 CommandLineRunner 接口提供了一種在應(yīng)用啟動(dòng)后執(zhí)行代碼的方法。這兩個(gè)接口非常相似,唯一的區(qū)別是 CommandLineRunner 的 run 方法接收一個(gè)字符串?dāng)?shù)組作為參數(shù),而 ApplicationRunner 的 run 方法接收一個(gè) ApplicationArguments 對(duì)象。

import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;

@Component
public class MyApplicationRunner implements ApplicationRunner {

    @Override
    public void run(ApplicationArguments args) throws Exception {
        // 應(yīng)用啟動(dòng)后執(zhí)行代碼
    }
}

4)Spring Boot Actuator 的健康檢查和指標(biāo)

雖然不是監(jiān)聽器,但如果你想要在應(yīng)用運(yùn)行時(shí)監(jiān)控其狀態(tài),你可以使用 Spring Boot Actuator。它提供了健康檢查、指標(biāo)收集等功能。

5)Spring Framework 的事件監(jiān)聽

除了 Spring Boot 提供的事件外,你還可以監(jiān)聽 Spring Framework 定義的事件,例如 ContextRefreshedEvent(當(dāng) ApplicationContext 被初始化或刷新時(shí)觸發(fā))。

記住,當(dāng)你創(chuàng)建監(jiān)聽器時(shí),確保它們被 Spring 容器管理(例如,通過 @Component 注解將它們聲明為 bean),這樣它們才能正確接收到事件通知。

三、SpringBoot不同階段的事件

Spring Boot應(yīng)用啟動(dòng)過程中的不同階段分表對(duì)應(yīng)不同的事件:

1)ApplicationStartingEvent

  • 這個(gè)事件在應(yīng)用啟動(dòng)開始時(shí)觸發(fā),非常早期,甚至在任何 Spring 容器刷新之前。
  • 它通常用于執(zhí)行非常早期的初始化代碼,或者監(jiān)聽系統(tǒng)屬性、環(huán)境變量等。

2)ApplicationEnvironmentPreparedEvent

  • 當(dāng) Spring Boot 的 Environment 準(zhǔn)備好并且已經(jīng)應(yīng)用了任何可用的 PropertySource,但在 ApplicationContext 創(chuàng)建之前觸發(fā)。
  • 你可以使用這個(gè)事件來修改或添加屬性源。

3)ApplicationPreparedEvent

  • 在 Spring 上下文被刷新之前,但在 bean definitions 被加載之后觸發(fā)。
  • 此時(shí),你可以訪問應(yīng)用上下文,但是 beans 還沒有被創(chuàng)建。

4)ApplicationStartedEvent

  • 在 Spring 上下文刷新之后觸發(fā),意味著所有的 bean 已經(jīng)被創(chuàng)建,但還沒有調(diào)用任何 CommandLineRunner 或 ApplicationRunner。
  • 此時(shí),應(yīng)用已經(jīng)啟動(dòng),但可能還沒有準(zhǔn)備好處理請(qǐng)求。

5)ApplicationReadyEvent

  • 當(dāng)應(yīng)用已經(jīng)啟動(dòng)并且準(zhǔn)備好了處理請(qǐng)求時(shí)觸發(fā)。
  • 這通常意味著所有的 CommandLineRunner 和 ApplicationRunner 都已經(jīng)被調(diào)用,并且應(yīng)用已經(jīng)完成了其啟動(dòng)過程。

6)ApplicationFailedEvent

  • 如果應(yīng)用啟動(dòng)失敗,則會(huì)觸發(fā)此事件。
  • 這允許你執(zhí)行一些清理工作,或者記錄關(guān)于失敗的信息。

通過監(jiān)聽這些事件,你可以在應(yīng)用啟動(dòng)和關(guān)閉的不同階段執(zhí)行自定義邏輯,從而實(shí)現(xiàn)更精細(xì)的控制和擴(kuò)展性。例如,你可能希望在 ApplicationReadyEvent 觸發(fā)后發(fā)送一個(gè)通知,表明應(yīng)用已成功啟動(dòng)并準(zhǔn)備好接收請(qǐng)求?;蛘撸?nbsp;ApplicationFailedEvent 觸發(fā)時(shí),你可能想要記錄詳細(xì)的錯(cuò)誤日志,并通知管理員。

拓展:Springboot 項(xiàng)目啟動(dòng)、關(guān)閉 的監(jiān)聽

想在項(xiàng)目啟動(dòng)或是關(guān)閉的時(shí)候, 做些事情。

例如啟動(dòng)時(shí),打印輸出 “你好” , 關(guān)閉時(shí),打印輸出 “再見”。 

示例:

其實(shí)方式很多,但是我推薦 根據(jù)官方白皮的建議做。

白皮鏈接

啟動(dòng)的監(jiān)聽:

 如果需要在SpringApplication啟動(dòng)后運(yùn)行某些特定代碼,可以實(shí)現(xiàn)ApplicationRunner或CommandLineRunner接口。兩個(gè)接口以相同的方式工作,并提供一個(gè)單獨(dú)的運(yùn)行方法,該方法在SpringApplication.run(…?) 完成。

關(guān)閉的監(jiān)聽: 

每個(gè)SpringApplication都向JVM注冊(cè)一個(gè)關(guān)閉掛鉤,以確保ApplicationContext在退出時(shí)正常關(guān)閉。可以使用所有標(biāo)準(zhǔn)的Spring生命周期回調(diào)(如DisposableBean接口或@PreDestroy注釋)。

示例使用代碼:

StandGuard.jav

import org.springframework.beans.factory.DisposableBean;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.stereotype.Component;
 
@Component
public class StandGuard  implements ApplicationRunner, DisposableBean {
    @Override
    public void run(ApplicationArguments args) {
        System.out.println("你好。");
    }
    @Override
    public void destroy() {
        System.out.println("再見!");
    }
}

效果:

以上就是SpringBoot應(yīng)用程序啟動(dòng)監(jiān)聽功能的常見方法的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot應(yīng)用啟動(dòng)監(jiān)聽的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java基于反射機(jī)制實(shí)現(xiàn)全部注解獲取的方法示例

    Java基于反射機(jī)制實(shí)現(xiàn)全部注解獲取的方法示例

    這篇文章主要介紹了Java基于反射機(jī)制實(shí)現(xiàn)全部注解獲取的方法,結(jié)合實(shí)例形式分析了java反射機(jī)制獲取注解的具體實(shí)現(xiàn)方法與操作注意事項(xiàng),需要的朋友可以參考下
    2019-09-09
  • java中Class.forName的作用淺談

    java中Class.forName的作用淺談

    這篇文章介紹了java中Class.forName的作用,有需要的朋友可以參考一下
    2013-11-11
  • Mybatis逆向工程實(shí)現(xiàn)連接MySQL數(shù)據(jù)庫

    Mybatis逆向工程實(shí)現(xiàn)連接MySQL數(shù)據(jù)庫

    本文主要介紹了Mybatis逆向工程實(shí)現(xiàn)連接MySQL數(shù)據(jù)庫,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Java判斷null的幾種方式及適用場(chǎng)景分析

    Java判斷null的幾種方式及適用場(chǎng)景分析

    在 Java 中,判斷對(duì)象是否為?null?是編程中最常見的操作之一,以下是幾種主要的判斷方式及其適用場(chǎng)景,感興趣的朋友一起看看吧
    2025-05-05
  • java排序去重示例分享

    java排序去重示例分享

    這篇文章主要介紹了java排序去重示例,對(duì)String strs = "ZZZ BBB AAA OOO ZZZ AAA ZZZ"計(jì)算出現(xiàn)個(gè)數(shù),排序去重,需要的朋友可以參考下
    2014-02-02
  • Java中實(shí)現(xiàn)訂單超時(shí)自動(dòng)取消功能(最新推薦)

    Java中實(shí)現(xiàn)訂單超時(shí)自動(dòng)取消功能(最新推薦)

    本文介紹了Java中實(shí)現(xiàn)訂單超時(shí)自動(dòng)取消功能的幾種方法,包括定時(shí)任務(wù)、JDK延遲隊(duì)列、Redis過期監(jiān)聽、Redisson分布式延遲隊(duì)列、RocketMQ延遲消息和RabbitMQ死信隊(duì)列,每種方法都有其優(yōu)缺點(diǎn),可以根據(jù)具體需求選擇合適的方法,感興趣的朋友一起看看吧
    2025-02-02
  • Java經(jīng)典排序算法之歸并排序詳解

    Java經(jīng)典排序算法之歸并排序詳解

    這篇文章主要為大家詳細(xì)介紹了Java經(jīng)典排序算法之歸并排序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • Spring Boot+Mybatis+Pagehelper分頁實(shí)現(xiàn)

    Spring Boot+Mybatis+Pagehelper分頁實(shí)現(xiàn)

    本篇文章主要講述的是Spring Boot+Mybatis+Pagehelper分頁實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • maven手動(dòng)上傳jar包示例及圖文步驟過程

    maven手動(dòng)上傳jar包示例及圖文步驟過程

    這篇文章主要為大家介紹了maven手動(dòng)上傳jar包示例及圖文步驟過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • 詳解Java中IO字節(jié)流基本操作(復(fù)制文件)并測(cè)試性能

    詳解Java中IO字節(jié)流基本操作(復(fù)制文件)并測(cè)試性能

    這篇文章主要介紹了Java中IO字節(jié)流基本操作(復(fù)制文件)并測(cè)試性能,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04

最新評(píng)論

时尚| 馆陶县| 修水县| 文登市| 福建省| 奈曼旗| 益阳市| 石狮市| 长岛县| 岳阳县| 阳东县| 乌拉特后旗| 会宁县| 平原县| 茶陵县| 襄樊市| 吉水县| 沙洋县| 南通市| 和林格尔县| 偃师市| 永安市| 吉林省| 凤城市| 新疆| 中超| 叶城县| 曲阳县| 井研县| 武定县| 凤台县| 阿克陶县| 凌源市| 汶上县| 吉安市| 山西省| 佛冈县| 汾西县| 江永县| 镇赉县| 济宁市|