zoukankan      html  css  js  c++  java
  • springboot容器启动顺序之@Configuration ContextRefreshedEvent事件初始化 ApplicationRunner

    笔者最近遇到一个问题 我们根据自己业务需要  需要首次启动springboot项目时 把数据库数据同步至本地缓存(比如ehcache)但有一个要求 在缓存未载入成功  不允许有流量打入

    一开始我们使用的是一个类实现ApplicationRunner  但发现  这个启动任务是需要等bean全部完成初始化 springmvc等完成初始化后才开始执行,这个时候 如果刚好遇到同步缓存进行中,就会出现缓存穿透的情况 而我们的应用又是希望完成同步完成之后  从缓存中获取数据  这个时候 笔者改成侦听ContextRefreshedEvent初始化完成事件  其实这个方案也已经能解决,

    只是笔者项目里面 已经有一个地方用到了这个 刚好尴尬的地方是 这个地方 是发布dubbo的执行方法  而我其实是希望在发布dubbo接口之前完成初始化工作 因为dubbo接口也很有可能消费者会调用  这个还是会造成缓存穿透  所以我单独写了一个@Configuration 

    @Configuration

    public class SyncFaceInfoToCacheListener {

     

    private static Logger logger = LoggerFactory.getLogger(SyncFaceInfoToCacheListener.class);

     

    @Autowired

    @Qualifier("sqliteManagerImpl")

    private SqlieteManager sqlieteManager;

     

    @Autowired

    private FaceCompareManager faceCompareManager;

     

     

    @Value("${local.sqlite.sqlname}")

    private String sqlName;

     

     

    @Bean

    public SyncFaceInfoToCacheListener onApplicationEvent() {

    //TODO这里执行业务逻辑

     

    return new SyncFaceInfoToCacheListener();

     

    }

    这样其实优先级会高于基于bean同步完成后的事件监听:ContextRefreshedEvent

     

     

     

  • 相关阅读:
    form2js的使用(续BootstrapTable)
    input限定文件上传类型:Microsoft Office MIME types
    Zookeeper环境搭建
    Zookeeper一致性协议——ZAB
    Zookeeper简介
    IOC容器加载流程
    Spring Bean 生命周期
    Spring Framework 5 模块组成、体系结构、整体架构
    什么是 IoC?什么是 DI ? 他们之间有什么关系?
    【MySQL实战45讲】索引部分整理
  • 原文地址:https://www.cnblogs.com/zhangfengshi/p/9565964.html
Copyright © 2011-2022 走看看