宇文氏 发表于 2018-1-6 17:10:21

Spring 通过ApplicationContext主动获取bean

@Component
  
public>  private static Logger logger = Logger.getLogger(SystemInit.class);
  @Autowired
  private ClusterDao clusterDao;
  

  @Override
  public void afterPropertiesSet() throws Exception {
  logger.info("--------------系统初始化中-------------------");
  initClusterCache();//初始化集群数据 必须最开始完成
  initRefreshAppStatusTask();
  initUpdateAppStatusToDB();
  initUpdateSession();
  logger.info("--------------系统初始化完成-------------------");
  }
  

  /**
  * 1.初始化集群数据
  */
  private void initClusterCache(){
  logger.info("1.初始化集群信息到缓存中:ClusterCache开始");
  //查询数据库所有的集群数据
  List<ClusterEntity> allClusterInfoList = clusterDao.selectAll(ClusterEntity.class, "delete_flag=0");
  for (ClusterEntity k8sClusterEntity : allClusterInfoList) {
  ClusterCache.put(k8sClusterEntity.getUuid() , k8sClusterEntity);//存入缓存
  }
  logger.info("1.初始化集群信息到缓存中:ClusterCache完成,总共" + allClusterInfoList.size() + "条数据");
  }
  

  /**
  * 2.初始化异步任务:刷新所有应用状态
  */
  private void initRefreshAppStatusTask() {
  logger.info("2.初始化任务:RefreshAllAppStatusTask 刷新应用下的k8s的pod状态并存入待更新队列");
  RefreshAppStatusExcutor.init();
  logger.info("2.初始化任务:RefreshAllAppStatusTask 完成");
  }
  

  /**
  * 3.初始化异步任务:更新状态到数据库
  */
  private void initUpdateAppStatusToDB() {
  logger.info("3.初始化任务:RefreshToDBTask 从待更新Appinstance队列取出数据并更新数据库");
  UpdateAppStatusToDBExcutor.init();
  logger.info("3.初始化任务:RefreshToDBTask 完成");
  }
  

  /**
  * 4. 初始化异步任务: 更新用户的所有session
  */
  private void initUpdateSession() {
  logger.info("4.初始化任务:更新session开始");
  UserSessionUpdateExcutor.init();
  logger.info("4.初始化任务:更新session结束");
  }
  

  ////////////////////////////////////////////////////////////////
  

  //此方法一定不要写成static
  @Override
  public void setApplicationContext(ApplicationContext applicationContext)
  throws BeansException {
  //实际上是把applicationContext传入到了SpringContextUtil里面
  SpringContextUtil.setApplicationContext(applicationContext);
  }
  
}
页: [1]
查看完整版本: Spring 通过ApplicationContext主动获取bean