예제 #1
0
  /** 从Diamond配置中心提取信息,构造TAtomDataSource、构造有优先级信息的读写DBSelector ---add by mazhidan.pt */
  public void init() {
    // 警告: 不要在构造DefaultDiamondManager时就注册ManagerListener(比如:configReceiver)
    // 也就是说,不要这样用: new DefaultDiamondManager(dbGroupKey, configReceiver),
    // 而是要设成null,等第一次取得信息并解析完成后再注册,这样可以不用同步,避免任何与并发相关的问题,
    // 因为有可能在第一次刚取回信息后,Diamond配置中心那边马上修改了记录,导致ManagerListener这个线程立刻收到信息,
    // 造成初始化线程和ManagerListener线程同时解析信息。
    configFactory = new DefaultConfigDataHandlerFactory();
    globalHandler = configFactory.getConfigDataHandler(tGroupDataSource.getFullDbGroupKey(), null);

    String dsWeightCommaStr =
        globalHandler.getData(
            tGroupDataSource.getConfigReceiveTimeout(),
            ConfigDataHandler.FIRST_CACHE_THEN_SERVER_STRATEGY);

    // extra config
    extraFactory = new DefaultConfigDataHandlerFactory();
    extraHandler =
        extraFactory.getConfigDataHandler(tGroupDataSource.getDbGroupExtraConfigKey(), null);
    String extraConfig =
        extraHandler.getData(
            tGroupDataSource.getConfigReceiveTimeout(),
            ConfigDataHandler.FIRST_CACHE_THEN_SERVER_STRATEGY);

    if (extraConfig != null) {
      parseExtraConfig(extraConfig);
      extraHandler.addListener(extraGroupConfigReceiver, null);
    }

    List<DataSourceWrapper> dswList = parse2DataSourceWrapperList(dsWeightCommaStr);
    resetByDataSourceWrapper(dswList);
    globalHandler.addListener(configReceiver, null);
  }
예제 #2
0
 /** 根据普通的DataSource构造读写DBSelector */
 public void init(List<DataSourceWrapper> dataSourceWrappers) {
   if ((dataSourceWrappers == null) || dataSourceWrappers.size() < 1) {
     throw new ConfigException("dataSourceWrappers不能为null且长度要大于0");
   }
   createTAtomDataSource = false;
   // update(createDBSelectors2(dataSourceWrappers));
   resetByDataSourceWrapper(dataSourceWrappers);
 }
예제 #3
0
 // configInfo样例: db1:rw, db2:r, db3:r
 private void parse(String dsWeightCommaStr) {
   List<DataSourceWrapper> dswList = parse2DataSourceWrapperList(dsWeightCommaStr);
   resetByDataSourceWrapper(dswList);
 }