zoukankan      html  css  js  c++  java
  • 使用chole创建一个连接池

    using Chloe;
    using Chloe.Infrastructure;
    using Chloe.SqlServer;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace Services
    {
        /// <summary>
        /// 数据库连接管理类
        /// </summary>
       public class DBconnectionManagement
        {
    
            public DBconnectionManagement() {
                aconnList = new List<DbObject>();
                aLock = new object();
            }
    
            private List<DbObject> aconnList { get; set; }
    
    
            /// <summary>
            /// 获去一个新的连接
            /// </summary>
            /// <returns></returns>
            private MyDbContext getNewconn()
            {
                return new MyDbContext("data source=119.29.21.XXX;initial catalog=XXX;user id=XX;password=XXX");
            }
    
            /// <summary>
            /// 新增一个连接到队列中
            /// </summary>
            private void Addconn() {
                aconnList.Add(new DbObject(getNewconn()));
                Console.WriteLine("新增了一个连接对象 目前" + aconnList.Count);
            }
    
            int getCount = 0;
            object aLock { get; set; }
            /// <summary>
            /// 获取一个连接对象
            /// </summary>
            public IDbContext Getconn()
            {
                Console.WriteLine("获取一次 第"+ ++getCount);
                IDbContext result;
                lock (aLock)
                {
                    result = aconnList.Where(d => d.IsUse == false).Select(d => d.Conn).FirstOrDefault();
                }
                if (result == null)
                {
                    Addconn();
                    return Getconn();
                }
                return result;
            }
        }
        /// <summary>
        /// 存放DB对象
        /// </summary>
        public class DbObject {
            private DbObject() { }
            
            public DbObject(MyDbContext conn) {
                conn.ABackOffFunc += BackOffFunc;
                this.Conn = conn;
                this.IsUse = false;
            }
            /// <summary>
            /// 连接对象
            /// </summary>
            private MyDbContext conn { get; set; }
    
            /// <summary>
            /// 连接对象
            /// </summary>
            public MyDbContext Conn { get { IsUse = true;return conn;  } set { conn = value; } }
    
            /// <summary>
            /// 是否真正被使用
            /// </summary>
            public bool IsUse { get; set; }
    
            /// <summary>
            /// 销毁时候的回掉函数
            /// </summary>
            public Action<DbObject> AFuncComplete;
    
    
            private void BackOffFunc(MyDbContext conn) {
                AFuncComplete?.Invoke(this);
                IsUse = false;
            }
    
        }
        /// <summary>
        /// 重写的连接对象
        /// </summary>
        public class MyDbContext : MsSqlContext, IDisposable {
    
            public MyDbContext(string connString):base(connString) {
    
            }
            public MyDbContext(IDbConnectionFactory dbConnectionFactory) : base(dbConnectionFactory) {
    
            }
            public new void Dispose()
            {
                ABackOffFunc.Invoke(this);
               
            }
            /// <summary>
            /// 真实销毁函数
            /// </summary>
            public void Close() {
                //如果不执行此操作将会一直保持连接  可以使用定时器销毁对象
                 base.Dispose();
            }
    
            /// <summary>
            /// 销毁时候的回掉函数
            /// </summary>
            public Action<MyDbContext> ABackOffFunc;
        }
    }
    

      

  • 相关阅读:
    mysql将视图数据迁移到表中
    一、Vant示例文件
    一、VS安装GitHub插件
    二、.net 特性之二
    .net Core jwt策略参数
    一、
    一、.Net Core 3.1 全局序列化
    前端项目
    python 小脚本升级-- 钉钉群聊天机器人
    java 接口测试,使用excel做数据驱动(二)
  • 原文地址:https://www.cnblogs.com/AnAng/p/9291716.html
Copyright © 2011-2022 走看看