24小时接单的黑客

黑客接单,黑客业务,黑客技术,黑客教程,网络安全

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

这一事件在一切 application/ command-line runners 启用以后发送。

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 关心:

https://github.com/javastacks/spring-boot-best-practice

1、新创建监听器

  • importlombok.extern.slf4j.Slf4j;
  • importorg.springframework.boot.availability.AvailabilityChangeEvent;
  • importorg.springframework.boot.availability.ReadinessState;
  • importorg.springframework.context.ApplicationListener;
  • /**
  • *由来微信公众平台:Java技术栈
  • */
  • @Slf4j
  • publicclassJavastackListenerimplementsApplicationListener<AvailabilityChangeEvent>{
  • @Override
  • publicvoidonApplicationEvent(AvailabilityChangeEventevent){
  • 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技术栈第一时间消息推送,不必离开。

    文中实践活动全部源码已提交:

    https://github.com/javastacks/spring-boot-best-practice

    参考资料:

    https://docs.spring.io/spring-boot/docs/2.3.5.RELEASE/reference/htmlsingle/#boot-features-application-events-and-listeners

    文中转载自微信公众号「 Java技术栈」,可以利用下列二维码关注。转截文中请联络 Java技术栈微信公众号。

    • 评论列表:
    •  辞眸做啡
       发布于 2022-06-02 12:13:25  回复该评论
    • er;/***由来微信公众平台:Java技术栈*/@Slf4jpublicclassJavastackListenerimplementsApplicationListener<AvailabilityChangeEven
    •  北槐树雾
       发布于 2022-06-02 04:41:03  回复该评论
    • ASE/reference/htmlsingle/#boot-features-application-events-and-listeners文中转载自微信公众号「 Java技术栈」,可以利用下列二维码关注。转截文中请联络 Java技术栈微信公众号。

    发表评论:

    «    2025年5月    »
    1234
    567891011
    12131415161718
    19202122232425
    262728293031
    文章归档
    标签列表

    Powered By

    Copyright Your WebSite.Some Rights Reserved.