某项目进行中,因为分布式多线程的缘由,项目需要频繁的启用新的数据库连接,在系统启动几小时后系统出现数据库连接池不够导致数据库连接不成功。

项目使用了DevExpress XPO

数据库采用的是MySQL V5.7.31

报错信息(类似的,下面是SQL Server的报错信息):

DevExpress.Xpo.DB.Exceptions.UnableToOpenDatabaseException
  HResult=0x80131500
  Message=无法打开数据库。连接字符串:“data source=192.168.1.202;user id=sa;password=***REMOVED***;initial catalog=Set;Persist Security Info=true;”;错误:'System.InvalidOperationException: 超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。
   在 System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection)
   在 System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   在 System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions)
   在 System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry)
   在 System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry)
   在 System.Data.SqlClient.SqlConnection.Open()
   在 DevExpress.Xpo.DB.MSSqlConnectionProvider.CreateDataBase(SqlConnection conn)“

Source=DevExpress.Xpo.v19.1
  StackTrace:
   在 DevExpress.Xpo.DB.MSSqlConnectionProvider.CreateDataBase(SqlConnection conn)
   在 DevExpress.Xpo.DB.MSSqlConnectionProvider.CreateDataBase()
   在 DevExpress.Xpo.DB.ConnectionProviderSql..ctor(IDbConnection connection, AutoCreateOption autoCreateOption)
   在 DevExpress.Xpo.DB.MSSqlConnectionProvider..ctor(IDbConnection connection, AutoCreateOption autoCreateOption)
   在 DevExpress.Xpo.DB.MSSqlConnectionProvider.CreateProviderFromString(String connectionString, AutoCreateOption autoCreateOption, IDisposable[]& objectsToDisposeOnDisconnect)
   在 DevExpress.Xpo.DB.DataStoreBase.QueryDataStore(String providerType, String connectionString, AutoCreateOption defaultAutoCreateOption, IDisposable[]& objectsToDisposeOnDisconnect)
   在 DevExpress.Xpo.XpoDefault.GetConnectionProvider(String connectionString, AutoCreateOption defaultAutoCreateOption, IDisposable[]& objectsToDisposeOnDisconnect)
   在 DevExpress.ExpressApp.Xpo.ConnectionStringDataStoreProvider.CreateWorkingStore(IDisposable[]& disposableObjects)
   在 DevExpress.ExpressApp.Xpo.XPObjectSpaceProvider.CreateObjectSpace(Func`1 objectSpaceDelegate)
   在 DevExpress.ExpressApp.Xpo.XPObjectSpaceProvider.CreateObjectSpace()
   在 SuperNest_DB_Test.Form1.button1_Click(Object sender, EventArgs e) 在 C:\Users\DELL\source\repos\SuperNest_DB_Test\SuperNest_DB_Test\Form1.cs 中: 第 52 行
   在 System.Windows.Forms.Control.OnClick(EventArgs e)
   在 System.Windows.Forms.Button.OnClick(EventArgs e)
   在 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   在 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   在 System.Windows.Forms.Control.WndProc(Message& m)
   在 System.Windows.Forms.ButtonBase.WndProc(Message& m)
   在 System.Windows.Forms.Button.WndProc(Message& m)
   在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   在 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
   在 System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
   在 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
   在 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
   在 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
   在 System.Windows.Forms.Application.Run(Form mainForm)
   在 SuperNest_DB_Test.Program.Main() 在 C:\Users\DELL\source\repos\SuperNest_DB_Test\SuperNest_DB_Test\Program.cs 中: 第 19 行

此异常最初是在此调用堆栈中引发的: 
    [外部代码]

内部异常 1:
InvalidOperationException: 超时时间已到。超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。

下面代码展示了如何在无数据库连接的情况下业务逻辑照样开展,以及在有数据库连接时对数据库连接池做可控管理:

IDataLayer dataLayer = null;
                        UnitOfWork uow = null;

try
                        {
                            string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
                            dataLayer = XpoDefault.GetDataLayer(connectionString, DevExpress.Xpo.DB.AutoCreateOption.DatabaseAndSchema);
                            uow = new UnitOfWork(dataLayer);
                        }
                        catch (Exception ex)
                        {
                            logHelper.ErrorOnce($"ClientID:{ClientID} Connecting the mysql database.Error message: {ex.Message}");
                        }

Program nc;
                            if (uow != null)
                            {
                                nc = new Program(uow);
                            }
                            else
                            {
                                nc = new Program();
                            }

.....

if (uow != null)
                        {
                            uow.CommitChanges();
                        }

try
                        {
                            if (uow != null)
                            {
                                uow.Disconnect();
                                uow.Dispose();
                            }
                            if (dataLayer != null)
                            {
                                dataLayer.Dispose();
                            }
                        }
                        catch (Exception ex)
                        {
                            logHelper.ErrorOnce($"DEVICE:{deviceID}  Error message: {ex.Message}。StackTrace: {ex.StackTrace}");
                        }

对XPO对象数据库访问数据库连接可控相关推荐

  1. Spring+Mybatis+Mysql搭建分布式数据库访问框架

    一.前言 用Java开发企业应用软件, 经常会采用spring+MyBatis+MySQL搭建数据库框架.如果数据量很大,一个mysql库存储数据访问效率很低,往往会采用分库存储管理的方式.本文讲述如 ...

  2. mysql的ole db 访问接口msdasql的数据源对象_数据库访问接口(ODBC,OLEDB,ADO)

    目录 数据库访问接口发展历史 ODBC历史 ODBC(Open Database Connectivity,开放数据库互连).要了解ODBC是什么,先了解一下数据库连接的相关知识.在最开始连接数据库时 ...

  3. “Zhuang.Data”轻型数据库访问框架(二)框架的入口DbAccessor对象

    目录: "Zhuang.Data"轻型数据库访问框架(一)开篇介绍 "Zhuang.Data"轻型数据库访问框架(二)框架的入口DbAccessor对象 先来看 ...

  4. JSP第六次课:数据库访问显示商品信息

    本次课任务实现商品管理 一.建立数据库.商品表 1.安装SQLserver2005,建立数据库ebuy.goods表 gid 主键,标识规范 种子1000,自动增1 add_time 默认值 getd ...

  5. lua 访问oracle,lua语言数据库访问 - Lua教程

    Lua 数据库访问 本文主要为大家介绍 Lua 数据库的操作库:LuaSQL.他是开源的,支持的数据库有:ODBC, ADO, Oracle, MySQL, SQLite 和 PostgreSQL. ...

  6. Access数据库访问助手类

    using System; using System.Collections.Generic; using System.Text; using System.Data; using System.D ...

  7. SQLServer数据库访问帮助类

    1.web.config配置数据库连接字符串 1 <?xml version="1.0"?> 2 <configuration> 3 <appSett ...

  8. 访问数据库_Lua 数据库访问

    Lua 数据库访问 本文主要为大家介绍 Lua 数据库的操作库:LuaSQL.他是开源的,支持的数据库有:ODBC, ADO, Oracle, MySQL, SQLite 和 PostgreSQL. ...

  9. 基于SqlSugar的数据库访问处理的封装,支持多数据库并使之适应于实际业务开发中

    Python微信订餐小程序课程视频 https://edu.csdn.net/course/detail/36074 Python实战量化交易理财系统 https://edu.csdn.net/cou ...

最新文章

  1. arcengine遍历属性表_【程序之坑】小程序云开发导出数据到excel表
  2. [java][ide][sts] 使用配置
  3. 移动端整屏滑动的实现
  4. 科技行业风投日趋谨慎:VR、机器学习和汽车值得关注
  5. Linux 5.4 LVM RAW 设备 配置的深入研究
  6. UBUNTU 用户及用户组管理 修改用户和主机名
  7. Prime算法生成迷宫
  8. python与财务工作总结_Python小结1
  9. 分享精心收藏的前台开发素材网站,都是干货
  10. CF 398 E(动态规划)
  11. 实现二叉树的序列化和反序列化
  12. vue,微信小程序,插件库,前端框架,PPT,工具,源码等学习网站
  13. 使用JS读取本地文件
  14. 故障树分析 - 事件概率模型
  15. Centos中IP地址的动静转换
  16. hotfox(gyb v2.6)增强
  17. 【邻接矩阵乘法】沼泽鳄鱼
  18. 为什么要找一个不提倡加班的工作?是我我们太懒,不求上进吗?
  19. 大学计算机作业互评评语简短,大学学生互评评语简短
  20. 配置路由器IP及测试连通性

热门文章

  1. C/C++程序固定单核CPU运行(几个示例)
  2. 牛客练习赛50(牛客1080F):F.tokitsukaze and Another Protoss and Zerg(组合数学 + NTT + 启发式)
  3. Java学习中遇到的中文乱码问题的整理和解决方法
  4. 由于word打字卡顿、延迟,怎么重新安装office
  5. 拉取 gcr.io 镜像,如 Kubernetes,istio 等
  6. Vufroia相机对焦问题
  7. 云计算工程师必备技能
  8. 计算机视觉作业(二)Local Feature Matching
  9. 安利几款超好用,不容错过的APP
  10. 数据库 流量切分_基于hash计算的多层实验流量切分的实现