1. using Chloe;
  2. using Chloe.Infrastructure;
  3. using Chloe.SqlServer;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9.  
  10. namespace Services
  11. {
  12. /// <summary>
  13. /// 数据库连接管理类
  14. /// </summary>
  15. public class DBconnectionManagement
  16. {
  17.  
  18. public DBconnectionManagement() {
  19. aconnList = new List<DbObject>();
  20. aLock = new object();
  21. }
  22.  
  23. private List<DbObject> aconnList { get; set; }
  24.  
  25. /// <summary>
  26. /// 获去一个新的连接
  27. /// </summary>
  28. /// <returns></returns>
  29. private MyDbContext getNewconn()
  30. {
  31. return new MyDbContext("data source=119.29.21.XXX;initial catalog=XXX;user id=XX;password=XXX");
  32. }
  33.  
  34. /// <summary>
  35. /// 新增一个连接到队列中
  36. /// </summary>
  37. private void Addconn() {
  38. aconnList.Add(new DbObject(getNewconn()));
  39. Console.WriteLine("新增了一个连接对象 目前" + aconnList.Count);
  40. }
  41.  
  42. int getCount = 0;
  43. object aLock { get; set; }
  44. /// <summary>
  45. /// 获取一个连接对象
  46. /// </summary>
  47. public IDbContext Getconn()
  48. {
  49. Console.WriteLine("获取一次 第"+ ++getCount);
  50. IDbContext result;
  51. lock (aLock)
  52. {
  53. result = aconnList.Where(d => d.IsUse == false).Select(d => d.Conn).FirstOrDefault();
  54. }
  55. if (result == null)
  56. {
  57. Addconn();
  58. return Getconn();
  59. }
  60. return result;
  61. }
  62. }
  63. /// <summary>
  64. /// 存放DB对象
  65. /// </summary>
  66. public class DbObject {
  67. private DbObject() { }
  68.  
  69. public DbObject(MyDbContext conn) {
  70. conn.ABackOffFunc += BackOffFunc;
  71. this.Conn = conn;
  72. this.IsUse = false;
  73. }
  74. /// <summary>
  75. /// 连接对象
  76. /// </summary>
  77. private MyDbContext conn { get; set; }
  78.  
  79. /// <summary>
  80. /// 连接对象
  81. /// </summary>
  82. public MyDbContext Conn { get { IsUse = true;return conn; } set { conn = value; } }
  83.  
  84. /// <summary>
  85. /// 是否真正被使用
  86. /// </summary>
  87. public bool IsUse { get; set; }
  88.  
  89. /// <summary>
  90. /// 销毁时候的回掉函数
  91. /// </summary>
  92. public Action<DbObject> AFuncComplete;
  93.  
  94. private void BackOffFunc(MyDbContext conn) {
  95. AFuncComplete?.Invoke(this);
  96. IsUse = false;
  97. }
  98.  
  99. }
  100. /// <summary>
  101. /// 重写的连接对象
  102. /// </summary>
  103. public class MyDbContext : MsSqlContext, IDisposable {
  104.  
  105. public MyDbContext(string connString):base(connString) {
  106.  
  107. }
  108. public MyDbContext(IDbConnectionFactory dbConnectionFactory) : base(dbConnectionFactory) {
  109.  
  110. }
  111. public new void Dispose()
  112. {
  113. ABackOffFunc.Invoke(this);
  114.  
  115. }
  116. /// <summary>
  117. /// 真实销毁函数
  118. /// </summary>
  119. public void Close() {
  120. //如果不执行此操作将会一直保持连接 可以使用定时器销毁对象
  121. base.Dispose();
  122. }
  123.  
  124. /// <summary>
  125. /// 销毁时候的回掉函数
  126. /// </summary>
  127. public Action<MyDbContext> ABackOffFunc;
  128. }
  129. }

  

使用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. Flutter之环境配置与项目搭建

    Flutter之环境配置与项目搭建 一,介绍 1.1,Dart Dart 是一种 易于学习. 易于扩展.并且可以部署到 任何地方 的 应用 编程 语言.并且同时借鉴了Java和JavaScript.D ...

  2. java编程思想第四版第六章总结

    1. 代码重构 为什么f要代码重构 第一次代码不一定是完美的, 总会发现更优雅的写法. 代码重构需要考虑的问题 类库的修改不会破坏客户端程序员的代码. 源程序方便扩展和优化 2. 包 创建一个独一无二 ...

  3. python:类2——有关类和对象的BIF内置函数

    1.检查.判断 判断一个类是不是另一个类的子类 issubclass(class, classinfo)如果第一个参数是第二个参数的子类.子子类等,返回true 非严格(自己可以认为是自己的子类): ...

  4. vue引用组件的两个方法

    <template> <div> <myComponent></myComponent> </div> </template> ...

  5. 究极秒杀Loadrunner乱码

    Loadrunner乱码一击必杀 之前有介绍一些简单的针对Loadrunner脚本或者调试输出内容中乱码的一些设置,但是并没能完全解决一些小伙伴的问题,因为那些设置实在能力有限,还是有很多做不到的事情 ...

  6. python字符串、正则-xdd

    1.分割字符串 str.split(sep,maxsplit) #(分隔符,分几次) 2.合并字符串 str2=string.join(iterable) #str2='@'.join(list1) ...

  7. JVM学习笔记(1)--运行时数据区域

    运行时数据区域 相对于c,c++.程序设计时,java并不需要手动释放或者创建内存用于存放程序,这的确使得java开发变得容易和轻松,一旦有一天出现了内存泄漏或者内存溢出的问题,如果不了解JVM虚拟机 ...

  8. linuxshell编程之数组和字符串处理工具

    数组:存放多个元素的连续内存空间. 声明数组:bash-4以后支持除默认的0,1,2……还可以自定义索引格式,此类数组称之为“关联数组” 声明索引数组:declare -a NAME 声明关联数组:d ...

  9. 创建指定python版本的虚拟环境

    使用virtualenvwrapper管理虚拟环境 鉴于virtualenv不便于对虚拟环境集中管理,所以推荐直接使用virtualenvwrapper. virtualenvwrapper提供了一系 ...

  10. solr数据操作

    本文介绍solr的基本数据操作,基于solr 8.2.solr支持多种数据格式,包括XML,JSON,CSV等,并提供多种脚本和工具来操作数据.本文讲解curl请求和JSON数据格式的处理方式. 本文 ...