private static void AddDbModelContext(DbModelContext ctx) { readerWriterLock.AcquireWriterLock(100); try { if (dbModelContexts.ContainsKey(ctx.DbContextName.ToLower())) { dbModelContexts[ctx.DbContextName.ToLower()] = ctx; } else { dbModelContexts.Add(ctx.DbContextName.ToLower(), ctx); } } catch (Exception e) { logger.LogError(e, "DbModelContextManager.AddDbModelContext.Error"); } finally { if (readerWriterLock.IsWriterLockHeld) { readerWriterLock.ReleaseWriterLock(); } } }
private static void BulidDataBaseInfo(XElement dbInfo) { var dBContexts = dbInfo?.Elements()?.ToArray(); if (dBContexts == null || !dBContexts.Any()) { logger.LogInformation("BulidDataBaseInfo.dBContexts=null"); return; } foreach (var item in dBContexts) { DbModelContext ctx = new DbModelContext(); ctx.DbContextName = item.Name?.ToString(); ctx.DbType = item.Attribute("DbType")?.Value; ctx.UserName = item.Attribute("UserName")?.Value; ctx.PassWord = item.Attribute("PassWord")?.Value; ctx.Database = item.Attribute("Database")?.Value; int p = 0; int.TryParse(item.Attribute("Pool")?.Value, out p); ctx.Pool = p; XElement master = item.Element("Master"); if (master == null) { logger.LogInformation("DbModelContextManager.BulidDataBaseInfo.Error.master=null"); continue; // master 一定不能为空 } int port = 0; int.TryParse(master.Attribute("Port")?.Value, out port); ctx.Master = new Master() { Ip = master.Attribute("Ip")?.Value, Port = port }; ctx.Slaves = new List <Slave>(); XElement slave = item.Element("Slave"); // 可以没有slave if (slave != null && slave.HasElements) { XElement[] items = slave.Elements("Item")?.ToArray(); foreach (var slv in items) { int.TryParse(slv.Attribute("Pool")?.Value, out p); int.TryParse(slv.Attribute("Port")?.Value, out port); var s = new Slave() { Ip = slv.Attribute("Ip")?.Value, Pool = p, Port = port }; ctx.Slaves.Add(s); } } AddDbModelContext(ctx); } }