Example #1
0
        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);
        }
Example #2
0
        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)));
        }
Example #3
0
 public DbManagerService(DbConnOption dbInfo, ILogger logger = null, int initConnNum = 5)
 {
     _manager        = new DbConnectionManager(dbInfo, initConnNum);
     _manager.Logger = logger;
 }