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;
}
}

  

使用chole创建一个连接池的更多相关文章

  1. JDBC创建mysql连接池代码

    1.底层实现类(DBConnection) package JDBC.JDBCPool.MyJDBCPool; import java.sql.Connection; import java.sql. ...

  2. Swoole4-swoole创建Mysql连接池

    一 .什么是mysql连接池 场景:每秒同时有1000个并发,但是这个mysql同时只能处理400个连接,mysql会宕机. 解决方案:连接池,这个连接池建立了200个和mysql的连接,这1000个 ...

  3. swoole4创建Mysql连接池

    一 .什么是mysql连接池 场景:每秒同时有1000个并发,但是这个mysql同时只能处理400个连接,mysql会宕机.   解决方案:连接池,这个连接池建立了200个和mysql的连接,这100 ...

  4. Netbeans 中创建数据连接池和数据源步骤(及解决无法ping通问题)

    1.启动glassfish服务器, 在浏览器的地址栏中输入 http://localhost:4848 2.首先建立JDBC Connection Pools: 3.new 一个Connectio P ...

  5. [转]使用VC/MFC创建一个线程池

    许多应用程序创建的线程花费了大量时间在睡眠状态来等待事件的发生.还有一些线程进入睡眠状态后定期被唤醒以轮询工作方式来改变或者更新状态信息.线程池可以让你更有效地使用线程,它为你的应用程序提供一个由系统 ...

  6. Redis】Java中使用Jedis操作Redis(Maven导入包)、创建Redis连接池

    如果我们使用Java操作Redis, 需要确保已经安装了 redis 服务及 Java redis 驱动. Maven项目可以直接在pom.xml中加入jedis包驱动: <!-- https: ...

  7. Android 性能优化(16)线程优化:Creating a Manager for Multiple Threads 如何创建一个线程池管理类

    Creating a Manager for Multiple Threads 1.You should also read Processes and Threads The previous le ...

  8. ThreadPoolExecutor – Java Thread Pool Example(如何使用Executor框架创建一个线程池)

    Java thread pool manages the pool of worker threads, it contains a queue that keeps tasks waiting to ...

  9. 创建一个线程池(java)

    private ThreadFactory threadFactory = new ThreadFactoryBuilder().setNameFormat("billService-poo ...

随机推荐

  1. BST的实现(二叉搜索树)

    void Inorder(struct Tree *T); //中序 void Preorder(struct Tree *T); //前序 void Postorder(struct Tree *T ...

  2. Maven系列第9篇:多环境构建支持,核心开发必备!

    maven系列目标:从入门开始开始掌握一个高级开发所需要的maven技能. 这是maven系列第9篇. 整个maven系列的内容前后是有依赖的,如果之前没有接触过maven,建议从第一篇看起,本文尾部 ...

  3. opencv随笔1

    图像处理技术一般包括图像压缩,增强和复原,匹配 描述和l识别 3 个部分. 图像处理一般指数字图像处理 ( Digitallmage Processing). 其中,数字图像是指用工业相机.摄像机.扫 ...

  4. django post请求

    django中提交post请求时候,需要携带CSRF,否则会报403错误,此时需要在form中添加{% csrf_token %} 或者注释掉settings.py -> MIDDLEWARE ...

  5. SpringBoot 正式环境必不可少的外部化配置

    前言 <[源码解析]凭什么?spring boot 一个 jar 就能开发 web 项目> 中有读者反应: 部署后运维很不方便,比较修改一个 IP 配置,需要重新打包. 这一点我是深有体会 ...

  6. go语言学习笔记(二)

    整数 有符号整数 int8 int16 int32 int64 无符号整数 uin8 uin16 uin32 uin64 无符号整数 uintptr可以进行运算这点很重要请了解unsafe包,大小不明 ...

  7. Redis 的底层数据结构(对象)

    目前为止,我们介绍了 redis 中非常典型的五种数据结构,从 SDS 到 压缩列表,这都是 redis 最底层.最常用的数据结构,相信你也掌握的不错. 但 redis 实际存储键值对的时候,是基于对 ...

  8. 2019-11-6:ubuntu 18安装tomcat 9.0

    1,下载tomcat,选择自己想要的版本下载即可 下载官网:http://tomcat.apache.org/ 2,将下载的源码放到自己需要的位置,解压,我新建了一个tomcat目录 sudo mkd ...

  9. Python--将文件夹中图片按照横屏竖屏进行分类

    搬运链接:https://www.jianshu.com/p/c8be54282e77 """ 可以遍历输入的路径的指定后缀的文件,主要是用来筛选图片,将图片分成 横屏, ...

  10. 人生若只如初见---Spring概述以及环境的搭建

    Spring 是什么 Spring是由Apache开发的一种轻量型Java框架,能够更加便捷使用JavaBean(之前只有EJB才能实现) Spring的主要优势:分层架构: DAO层:(Data A ...