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

     

     

     

  • 相关阅读:
    平台调用中的数据封送处理
    JavaScript 中的事件流
    Jquery插件 表格固定表头
    ASP.NET MVC Action Filter与内置的Filter实现
    getCurrentScript的改进
    analyze spring framework source
    Windows Azure: Service Bus Brokered Messaging DeadLetterQueue 使用详解
    C#截图
    权限系统
    音乐播放器
  • 原文地址:https://www.cnblogs.com/zhangfengshi/p/9565964.html
Copyright © 2011-2022 走看看