1.7 springboot 应用程序事件和侦听器
除了通常的Spring框架事件,比如ContextRefreshedEvent, SpringApplication还会发送一些额外的应用事件。
有些事件实际上是在ApplicationContext创建之前被触发的,所以您不能将这些事件的侦听器注册为@Bean。
你可以SpringApplication.addListeners(…)方法或SpringApplicationBuilder.listeners(…)方法注册它们。
如果您希望自动注册这些侦听器,而不管应用程序是以何种方式创建的,那么您可以添加一个META-INF/spring.factories到你的项目,
并通过使用 org.springframework.context.ApplicationListener键引用你的listener(s),如下所示:
org.springframework.context.ApplicationListener=com.example.project.MyListener
当应用程序运行时,应用程序事件按以下顺序发送:
1.ApplicationStartingEvent在运行开始时发送,但在任何处理之前,侦听器和初始化器的注册除外。
2.当在上下文中使用的Environment已知,但在创建上下文中之前,将发送 ApplicationEnvironmentPreparedEvent。
3.当ApplicationContext被准备好并且ApplicationContextInitializedEvent被调用,但是在任何bean定义被加载之前,一个ApplicationContextInitializedEvent被发送。
4.ApplicationPreparedEvent在启动刷新之前,但在加载bean定义之后发送。
5.ApplicationStartedEvent在刷新上下文之后,但在调用任何应用程序和命令行运行程序之前被发送。6.AvailabilityChangeEvent在LivenessState之后被发送。正确,表示应用程序被认为是活动的。
7.在调用了任何应用程序和命令行运行程序之后,都会发送一个ApplicationReadyEvent
8.一个AvailabilityChangeEvent在ReadinessState之后被发送。ACCEPTING_TRAFFIC表示应用程序已经准备好服务请求。
9.如果启动时出现异常,则发送一个ApplicationFailedEvent。