• Spring容器创建前:

  1. ApplicationStartingEvent: Spring容器创建前,项目启动时执行;
  2. ApplicationEnvironmentPreparedEvent: Spring容器创建前,yml等配置文件加载后执行;
  • Spring容器创建后:

  1. ApplicationPreparedEvent: Spring容器创建后,Bean创建前执行;
  2. ContextRefreshedEvent: Spring容器创建后,Bean创建后执行;
  3. ApplicationStartedEvent: Spring Boot项目启动成功执行;

知识点: 前三种事件发布时, 因为Spring容器还未创建, 所以不能直接使用Spring事件监听器的方式。 需要使用Spring Boot加载事件监听器的方式;

步骤: 

  1. 创建spring.factories文件; resource --> META-INF --> spring.factories
  2. 自定义事件监听器:
  3. public class MyApplicationListener implements ApplicationListener{@Overridepublic void onApplicationEvent(ApplicationEvent event) {//todo... 做幂等校验,防止业务多次执行;if (event instanceof ApplicationStartingEvent) {System.out.println("Spring容器创建前,项目启动时, 执行==========================");System.out.println("不可以使用Spring容器中的Bean");} else if (event instanceof ApplicationEnvironmentPreparedEvent) {System.out.println("Spring容器创建前,yml等配置文件加载后, 执行==================");System.out.println("不可以使用Spring容器中的Bean");} else if (event instanceof ApplicationPreparedEvent) {System.out.println("Spring容器创建后,Bean创建前, 执行==========================");System.out.println("不可以使用Spring容器中的Bean");} else if (event instanceof ContextRefreshedEvent) {System.out.println("Spring容器创建后,Bean创建后, 执行==========================");System.out.println("可以使用Spring容器中的Bean");} else if (event instanceof ApplicationStartedEvent) {System.out.println("Spring Boot项目启动成功, 执行==============================");System.out.println("可以使用Spring容器中的Bean");}}
    }
  4. 将自定义监听器加入spring.factories文件中: 
    org.springframework.context.ApplicationListener=
    \com.example.springbootdemo.listener.MyApplicationListener
  5. 完成;

启动日志:

特别注意: 

需要在onApplicationEvent()方法中,做幂等校验(业务执行前);原因如下两点:

  1. 服务可能会多节点部署;
  2. 因为集成Spring Cloud时,run()方法会被执行两次;所以如果项目中集成了Spring Cloud,则事件也会被触发两次;

例如: 使用redis的setnx命令做幂等校验等;

Spring Boot启动过程中相关事件相关推荐

  1. [Spring Boot] 2. Spring Boot 启动过程定制化

    在上一篇文章中,从源码角度介绍了Spring Boot的启动过程.启动的代码虽然只有短短的一行,但是背后所做的工作还真不少,其中有一些可以定制化的部分,主要分为以下几个方面: 初始化器(Initial ...

  2. Spring Boot启动过程(七):Connector初始化

    Connector实例的创建已经在Spring Boot启动过程(四):Spring Boot内嵌Tomcat启动中提到了: Connector是LifecycleMBeanBase的子类,先是设置L ...

  3. Spring Boot启动过程(二)

    书接上篇 该说refreshContext(context)了,首先是判断context是否是AbstractApplicationContext派生类的实例,之后调用了强转为AbstractAppl ...

  4. Spring boot 启动过程

    先Mark, https://www.cnblogs.com/trgl/p/7353782.html https://blog.csdn.net/zl1zl2zl3/article/details/7 ...

  5. Spring Boot 启动事件顺序

    大家都知道,在 Spring 框架中事件和监听无处不在,打通了 Spring 框架的任督二脉,事件和监听也是 Spring 框架必学的核心知识之一. 一般来说,我们很少会使用到应用程序事件,但我们也不 ...

  6. Spring Boot 启动事件和监听器,太强大了!

    大家都知道,在 Spring 框架中事件和监听无处不在,打通了 Spring 框架的任督二脉,事件和监听也是 Spring 框架必学的核心知识之一. 一般来说,我们很少会使用到应用程序事件,但我们也不 ...

  7. Spring Boot启动过程源码分析--转

    https://blog.csdn.net/dm_vincent/article/details/76735888 关于Spring Boot,已经有很多介绍其如何使用的文章了,本文从源代码(基于Sp ...

  8. 强大的Spring Boot启动监听器事件-初始化系统账号密码

    文章目录 前言 一.SpringApplicationEvents 事件类型 1.1 ApplicationStartingEvent 1.2 ApplicationEnvironmentPrepar ...

  9. spring boot 启动事件

    spring boot 启动事件 展示 boot 启动过程中事件 @SpringBootApplication public class BootCuratorApplication {public ...

最新文章

  1. solr 实现对经纬度的查询
  2. 使用leangoo实现多泳道看板任务
  3. 2021 年度热门技术书单提前公开,这些好书藏不住了
  4. 从大象安全套到超级表格
  5. git回退commit_Git进阶 温故知新系列
  6. boost::adaptors::ref_unwrapped相关的测试程序)
  7. bzoj4543. [POI2014]Hotel加强版
  8. 数据库的移动 1007 sqlserver
  9. linux指法教程,Linux的vim的使用
  10. 转载 2012年游戏行业人才需求预测
  11. UI交互设计师在准备简历时应该注意什么?
  12. 服务器上读取文件,服务器上读取文件
  13. java 生成ai矢量图_(针对新手)AI将位图图标转换为矢量图方法
  14. 我的世界旅行者地图服务器不显示,我的世界旅行者地图怎么没有传送 | 手游网游页游攻略大全...
  15. 如何限制计算机游戏,如何禁止玩电脑游戏、屏蔽网络游戏方法
  16. Android Studio稀奇古怪的疑难杂症
  17. SDUT 2084 DOTA-人王之战(博弈论)
  18. 一个事物两个方面的对比举例_象征和体现这两个词的区别  最好举例子说明,谢谢啦...
  19. SAP F1 无法显示该网页 完美解决方案(不用重装SAP)
  20. 观点 | ​苏宁传统零售业“数字化转型”经验分享

热门文章

  1. 百度翻译接口测试(3)-最终篇
  2. mac 中判断command键是否被按下
  3. 全网通手机插两张电信卡会怎么样
  4. 移动物联卡多少钱一张?物联卡批发价格?
  5. JAVA菜鸟成长记——JNDI
  6. 深圳证券交易所网络投票业务指南
  7. 【C语言】案例二十一 从键盘输入一组数据,求出这一组数据的平均值并输出(调用函数)
  8. 通过vnc自动连接linux,通过VNC连接Linux远程桌面
  9. 多RFDI标签读取冲突问题
  10. Dockerfile之gosu浅析