private int _checkConnTimeout = 60; //60s /// <summary> /// 使用连接信息构造一个数据库连接管理类 /// </summary> /// <param name="connInfo"></param> /// <param name="initConn">初始连接:5,建议和最小池子数一致</param> /// <param name="timeout">30s</param> public DbConnectionManager(DbConnOption connInfo, int initConn = 5, int timeout = 30) { this._initConn = initConn; this._connInfo = new DbConnOption(connInfo.DbConnectionString, connInfo.DbConnectionType); if (initConn > 0) { DbConnectionWrapper[] arrConn = new DbConnectionWrapper[initConn]; Parallel.For(0, initConn, x => { arrConn[x] = this.CreateNew(); }); this._dbCanUse.AddRange(arrConn.Where(x => x != null)); } //开启线程,定时检查释放多余的连接 Thread th = new Thread(CheckConn) { IsBackground = true, Priority = ThreadPriority.BelowNormal, Name = "检查数据库连接" }; th.Start(this); }
public static IServiceCollection AddDbService(this IServiceCollection service, DbConnOption dbInfo, int initConnNum = 5) { var logger = service.BuildServiceProvider().GetService <ILoggerFactory>()?.CreateLogger("DB"); return(service.AddSingleton <IDbService>(factory => new DbManagerService(dbInfo, logger, initConnNum))); }
public DbManagerService(DbConnOption dbInfo, ILogger logger = null, int initConnNum = 5) { _manager = new DbConnectionManager(dbInfo, initConnNum); _manager.Logger = logger; }