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

歡迎訪問 生活随笔!

生活随笔

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

javascript

java 自动启动监听_Spring Boot 启动事件和监听器,太强大了!

發布時間:2023/12/10 javascript 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 自动启动监听_Spring Boot 启动事件和监听器,太强大了! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

大家都知道,在 Spring 框架中事件和監聽無處不在,打通了 Spring 框架的任督二脈,事件和監聽也是 Spring 框架必學的核心知識之一。

一般來說,我們很少會使用到應用程序事件,但我們也不要忘了它們的存在,比如說在 Spring 框架內部都使用了各種不同的事件來處理不同的任務。

毫無疑問,在 Spring Boot 框架中,事件和監聽也得到了發揚光大,除了常用的 Spring Framework 事件(例如:ContextRefreshedEvent)之外,Spring Boot 在啟動過程中還發送一系列其他的應用程序事件。

Spring Boot 啟動事件順序

1、ApplicationStartingEvent

這個事件在 Spring Boot 應用運行開始時,且進行任何處理之前發送(除了監聽器和初始化器注冊之外)。

2、ApplicationEnvironmentPreparedEvent

這個事件在當已知要在上下文中使用 Spring 環境(Environment)時,在 Spring 上下文(context)創建之前發送。

3、ApplicationContextInitializedEvent

這個事件在當 Spring 應用上下文(ApplicationContext)準備好了,并且應用初始化器(ApplicationContextInitializers)已經被調用,在 bean 的定義(bean definitions)被加載之前發送。

4、ApplicationPreparedEvent

這個事件是在 Spring 上下文(context)刷新之前,且在 bean 的定義(bean definitions)被加載之后發送。

5、ApplicationStartedEvent

這個事件是在 Spring 上下文(context)刷新之后,且在 application/ command-line runners 被調用之前發送。

6、AvailabilityChangeEvent

這個事件緊隨上個事件之后發送,狀態:ReadinessState.CORRECT,表示應用已處于活動狀態。

7、ApplicationReadyEvent

8、AvailabilityChangeEvent

這個事件緊隨上個事件之后發送,狀態:ReadinessState.ACCEPTING_TRAFFIC,表示應用可以開始準備接收請求了。

9、ApplicationFailedEvent

這個事件在應用啟動異常時進行發送。

上面所介紹的這些事件列表僅包括綁定到 SpringApplication 的 SpringApplicationEvents 事件,除了這些事件以外,以下事件也會在 ApplicationPreparedEvent 之后和 ApplicationStartedEvent 之前發送:

WebServerInitializedEvent

這個 Web 服務器初始化事件在 WebServer 啟動之后發送,對應的還有 ServletWebServerInitializedEvent(Servlet Web 服務器初始化事件)、ReactiveWebServerInitializedEvent(響應式 Web 服務器初始化事件)。

ContextRefreshedEvent

這個上下文刷新事件是在 Spring 應用上下文(ApplicationContext)刷新之后發送。

自定義啟動事件監聽器

既然我們知道了 Spring Boot 在啟動過程中的各個事件,那么我們就可以在每個環節來處理一些我們想做的事情,只需要自定義一個監聽器來監聽某個事件就可以了。

比如我們想在上面的第 8 步,即應用啟動完成可以接收請求了,我們簡單輸出一個成功標識。

Spring Boot 基礎的構建這里就不介紹了,如果你對 Spring Boot 還不是很熟悉,或者只是會簡單的使用,那還是建議你深入學習下吧,推薦這個 Spring Boot 學習倉庫,歡迎 Star 關注:

1、新建監聽器

import lombok.extern.slf4j.Slf4j;

import org.springframework.boot.availability.AvailabilityChangeEvent;

import org.springframework.boot.availability.ReadinessState;

import org.springframework.context.ApplicationListener;

/**

* 來源微信公眾號:Java技術棧

*/

@Slf4j

public class JavastackListener implements ApplicationListener {

@Override

public void onApplicationEvent(AvailabilityChangeEvent event) {

log.info("監聽到事件:" + event);

if (ReadinessState.ACCEPTING_TRAFFIC == event.getState()){

log.info("應用啟動完成,可以請求了……");

}

}

}

新建一個自定義監聽器,實現了 ApplicationListener 接口,泛型 AvailabilityChangeEvent 表示僅僅監聽 AvailabilityChangeEvent 事件。

因第 8 步的事件和第 6 步的事件同名,我們可以根據事件的狀態來區分到底是哪一個環節的事件 。

2、注冊監聽器

注冊監聽器有兩種方式:

1、在資源目錄中的 META-INF/spring.factories 文件中自動注冊:

org.springframework.context.ApplicationListener=\

cn.javastack.springboot.features.listener.JavastackListener

2、如果是監聽 Spring 應用上下文(ApplicationContext)創建之后的事件,可以直接在監聽器上使用 @Component 注解即可,否則需要使用第一種方法的自動注冊,因為 ApplicationContext 并未創建,這時的 Bean 是不能被加載的。

3、應用啟動

下面來看下啟動日志:

可以看到同時輸出了第 6 步和 8 步的監聽日志,但只輸出第 8 步的啟動完成日志,自定義監聽實現成功。

總結

了解了 Spring Boot 啟動過程中的各個事件及監聽機制,大家可以依葫蘆畫瓢實現 Spring Boot 啟動過程中的各個自定義操作,比如說在啟動過程上實現動態注冊、移除 Bean 等。

一般來說,不建議使用事件和監聽器來實現比較耗時和繁重的任務,這樣會影響應用程序的正常啟動,考慮使用 Spring Boot 的 application/ command-line runners 來進行實現。

本文只是介紹了一下 Spring Boot 啟動過程中的事件及如何實現自定義監聽器,怎么實現一個業務上的自定義事件和監聽器不在本文范圍之類,后續棧長再開一篇,關注公眾號Java技術棧第一時間推送,不要走開。

本文實踐所有源代碼已上傳:

參考資料:

最后,覺得有收獲,在看、轉發一下哦,原創不易,需要鼓勵。

版權申明:本文系公眾號 "Java技術棧" 原創,原創實屬不易,轉載、引用本文內容請注明出處,禁止抄襲、洗稿,請自重,尊重他人勞動成果和知識產權。

近期熱文推薦:

覺得不錯,別忘了隨手點贊+轉發哦!

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的java 自动启动监听_Spring Boot 启动事件和监听器,太强大了!的全部內容,希望文章能夠幫你解決所遇到的問題。

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