欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

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

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

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

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

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

你可以創(chuàng)建一個類來實(shí)現(xiàn) ApplicationListener 接口,并指定要監(jiān)聽的事件類型。例如,要監(jiān)聽?wèi)?yī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)用啟動完成事件
    }
}

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)用啟動完成事件
    }
}

3)使用 ApplicationRunner 或 CommandLineRunner 接口

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

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)用啟動后執(zhí)行代碼
    }
}

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

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

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

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

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

三、SpringBoot不同階段的事件

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

1)ApplicationStartingEvent

  • 這個事件在應(yīng)用啟動開始時觸發(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ā)。
  • 你可以使用這個事件來修改或添加屬性源。

3)ApplicationPreparedEvent

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

4)ApplicationStartedEvent

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

5)ApplicationReadyEvent

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

6)ApplicationFailedEvent

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

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

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

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

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

示例:

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

白皮鏈接

啟動的監(jiān)聽:

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

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

每個SpringApplication都向JVM注冊一個關(guān)閉掛鉤,以確保ApplicationContext在退出時正常關(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)用程序啟動監(jiān)聽功能的常見方法的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot應(yīng)用啟動監(jiān)聽的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringBoot下RabbitMq實(shí)現(xiàn)定時任務(wù)

    SpringBoot下RabbitMq實(shí)現(xiàn)定時任務(wù)

    這篇文章主要為大家詳細(xì)介紹了SpringBoot下RabbitMq實(shí)現(xiàn)定時任務(wù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • SpringBoot使用攔截器Interceptor實(shí)現(xiàn)統(tǒng)一角色權(quán)限校驗(yàn)

    SpringBoot使用攔截器Interceptor實(shí)現(xiàn)統(tǒng)一角色權(quán)限校驗(yàn)

    角色權(quán)限校驗(yàn),是保證接口安全必備的能力:有權(quán)限才可以操作,所以,一般對于這種通用邏輯,推薦不與主業(yè)務(wù)邏輯耦合,那么怎么來解耦,那么本文小編就給大家詳細(xì)講解如何使用攔截器Interceptor實(shí)現(xiàn)統(tǒng)一角色權(quán)限校驗(yàn),需要的朋友可以參考下
    2023-07-07
  • Schedule定時任務(wù)在分布式產(chǎn)生的問題詳解

    Schedule定時任務(wù)在分布式產(chǎn)生的問題詳解

    這篇文章主要介紹了Schedule定時任務(wù)在分布式產(chǎn)生的問題詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • Java將對象寫入文件讀出_序列化與反序列化的實(shí)例

    Java將對象寫入文件讀出_序列化與反序列化的實(shí)例

    下面小編就為大家?guī)硪黄狫ava將對象寫入文件讀出_序列化與反序列化的實(shí)例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • Windows下 IDEA編譯調(diào)試 hive2.3.9的過程解析

    Windows下 IDEA編譯調(diào)試 hive2.3.9的過程解析

    這篇文章主要介紹了Windows下 IDEA編譯調(diào)試 hive2.3.9的過程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • Spring Web MVC和Hibernate的集成配置詳解

    Spring Web MVC和Hibernate的集成配置詳解

    這篇文章主要介紹了Spring Web MVC和Hibernate的集成配置詳解,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2017-12-12
  • Spring Boot中自定義注解結(jié)合AOP實(shí)現(xiàn)主備庫切換問題

    Spring Boot中自定義注解結(jié)合AOP實(shí)現(xiàn)主備庫切換問題

    這篇文章主要介紹了Spring Boot中自定義注解+AOP實(shí)現(xiàn)主備庫切換的相關(guān)知識,本篇文章的場景是做調(diào)度中心和監(jiān)控中心時的需求,后端使用TDDL實(shí)現(xiàn)分表分庫,需要的朋友可以參考下
    2019-08-08
  • java 查找字符串所在的位置代碼

    java 查找字符串所在的位置代碼

    這篇文章主要介紹了java 查找字符串所在的位置代碼,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • springboot使用@KafkaListener監(jiān)聽多個kafka配置實(shí)現(xiàn)

    springboot使用@KafkaListener監(jiān)聽多個kafka配置實(shí)現(xiàn)

    當(dāng)服務(wù)中需要監(jiān)聽多個kafka時,?需要配置多個kafka,本文主要介紹了springboot使用@KafkaListener監(jiān)聽多個kafka配置實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-04-04
  • Java版的7種單例模式寫法示例

    Java版的7種單例模式寫法示例

    這篇文章主要給大家介紹了關(guān)于Java版的7種單例模式寫法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10

最新評論