首页 > 其他分享 >SpringBoot 项目启动后监听器执行操作:ContextRefreshEvent

SpringBoot 项目启动后监听器执行操作:ContextRefreshEvent

时间:2024-06-21 16:35:54浏览次数:22  
标签:ContextRefreshedEvent SpringBoot ContextRefreshEvent userJson userInfo 监听器 Appli

一 Spring boot运行时,会依次发送以下事件

1. ApplicationStartingEvent 

2. ApplicationEnvironmentPreparedEvent:当Environment已经准备好,在context 创建前

3. ApplicationContextInitializedEvent:在ApplicationContext 创建和ApplicationContextInitializer都被调用后,但是bean definition没有被加载前

4. ApplicationPreparedEvent:bean definition已经加载,但是没有refresh

5. ApplicationStartedEvent: context 已经被refresh, 但是application 和command-line 的runner都没有被调用

6. AvailabilityChangeEvent

7. ApplicationReadyEvent: application 和command-line 的runner都被调用后触发

8. AvailabilityChangeEvent

9. ApplicationFailedEvent: 启动失败触发

另外,会在 ApplicationPreparedEvent 之后和 ApplicationStartedEvent 之前发送 ContextRefreshedEvent 事件

二 项目启动后需要执行某个操作

1. 实现 ApplicationListener<E extends ApplicationEvent>接口

2. ApplicationEvent 的子类可以是 ApplicationReadyEvent 或者 ContextRefreshedEvent

3. ApplicationReadyEvent 的示例

@Component
@Slf4j
public class ApplicationInit implements ApplicationListener<ApplicationReadyEvent> {
    
    // 项目启动后预热JSONObject
    @Override
    public void onApplicationEvent(ApplicationReadyEvent applicationReadyEvent) {
        UserInfo userInfo = new UserInfo();
        userInfo.setId(123L);
        userInfo.setChannel("hello");
        String userJson = JSON.toJSONString(userInfo);
        JSONObject.parseObject(userJson, UserInfo.class);
    }
}

三 ContextRefreshedEvent 多次执行的问题

1. web应用会出现父子容器,这样就会触发两次

2. 解决方法:ApplicationListener<ContextRefreshedEvent> 应该和 ApplicationContext 一对一

@Order
@Component
@Slf4j
public class ApplicationInit implements ApplicationListener<ContextRefreshedEvent> {

    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        // SpringBoot 项目区启动后,监听器执行对应事件的逻辑
        UserInfo userInfo = new UserInfo();
        userInfo.setId(123L);
        userInfo.setChannel("hello");
        String userJson = JSON.toJSONString(userInfo);
        JSONObject.parseObject(userJson, UserInfo.class);
    }
}

 

标签:ContextRefreshedEvent,SpringBoot,ContextRefreshEvent,userJson,userInfo,监听器,Appli
From: https://www.cnblogs.com/blogtech/p/18260779

相关文章

  • 基于springboot地方废物回收机构管理系统
    收藏关注不迷路||项目不适合可以浏览博主其他项目文章项目源码||毕设定制||远程支持||可联系博主---------------同类型文章链接--------------------------java项目设计专栏1项目基于springboot地方废物回收机构管理系统本系统的核心价值观在于为用户打造一个便......
  • 计算机Java项目|SpringBoot在线宠物用品交易网站
    作者主页:编程指南针作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO特邀作者、多年架构师设计经验、腾讯课堂常驻讲师主要内容:Java项目、Python项目、前端项目、人工智能与大数据、简历模板、学习资料、面试题库、技术互......
  • Springboot+Vue+Mybatis-Plus+Easyexcel实现文件导入+导出的excel单元格下拉列表
    引言文件的导入与导出功能扮演着至关重要的角色,特别是在处理大量数据和复杂的表格时。通过整合SpringBoot、Vue、Mybatis-Plus和Easyexcel等先进技术,我们可以构建一个高效、灵活的文件处理系统。其中,Excel作为广泛使用的电子表格软件,其单元格下拉列表功能对于数据录入和校验......
  • 基于Springboot的CSGO赛事管理系统(有报告)。Javaee项目,springboot项目。
    演示视频:基于Springboot的CSGO赛事管理系统(有报告)。Javaee项目,springboot项目。项目介绍:采用M(model)V(view)C(controller)三层体系结构,通过Spring+SpringBoot+Mybatis+Vue+Maven+Layui+Elementui来实现。MySQL数据库作为系统数据储存平台,实现了基于B/S结构的Web系统......
  • ssm springmvc springboot区别
    pom.xml文件里看ssm<dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web......
  • Java毕业设计 基于springboot vue音乐网站
    Java毕业设计基于springbootvue音乐网站SpringBoot音乐网站功能介绍首页图片轮播歌曲信息歌曲分类歌曲详情歌曲播放音乐下载评论注册登录个人中心更新信息用户后台:登录个人中心修改密码个人信息音乐下载管理员:登录个人中心修改密码个人信息用户管......
  • SpringBoot配置多CacheManager
    SpringCache配置多CacheManager背景​Spring为了减少数据的执行次数(重点在数据库查询方面),在其内部使用aspectJ技术,为执行操作的结果集做了一层缓存的抽象。这极大的提升了应用程序的性能。由于其切面注入的特性,所以不会对我们的程序造成任何的影响。对于一些实时性要求不那么高......
  • java基于SpringBoot+Vue的失踪人员信息发布与管理系统(源码+lw+部署文档+讲解等)
    文章目录前言详细视频演示项目运行截图技术框架后端采用SpringBoot框架前端框架Vue可行性分析系统测试系统测试的目的系统功能测试数据库表设计代码参考数据库脚本为什么选择我?获取源码前言......
  • SpringBoot开发中的日志级别
    文章目录前言一、日志级别是什么?二、使用步骤1.**添加依赖**:2.**配置日志级别**:3.**在代码中使用日志**:总结前言在SpringBoot开发中,日志系统是一个不可或缺的部分,它帮助我们跟踪应用程序的运行状态、调试代码以及监控性能。然而,随着日志信息的不断增加,如何合......
  • springboot——https请求异常Invalid character found in method name. HTTP method n
    遇到问题的情况接口没有配置https,请求时用https会此异常。其他情况1、问题现象java.lang.IllegalArgumentException:Invalidcharacterfoundinmethodname.HTTPmethodnamesmustbetokensatorg.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11Inp......