/** 从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); }
public String getPasswd() { if (null != passwdHandler) { String passwdStr = passwdHandler.getData( TDDLConstant.DIAMOND_GET_DATA_TIMEOUT, ConfigDataHandler.FIRST_CACHE_THEN_SERVER_STRATEGY); if (passwdStr == null) { logger.error("[getDataError] remote password string is empty !"); return null; } return DruidConfParser.parserPasswd(passwdStr); } logger.error("[getDataError] passwdConfig not init !"); return null; }