当前位置:网站首页 > 数据科学与大数据 > 正文

达梦连接数据库jdbc(达梦数据库连接池)



达梦连接设置schema 达梦连接池_mysql

达梦连接设置schema 达梦连接池_达梦_02

上面代码可以说明,连接池已经提供了完备的机制来处理连接错误,从连接池中取出的连接如果失效时会自动重试,必要时会直接创建新的连接,来保证sql请求不会因为连接失效而响应失败。

为此专门进行了对比验证,将sqlproxy改为连接到mysql,看是否存在此问题

达梦连接设置schema 达梦连接池_达梦连接设置schema_03

对应打印此日志的相关代码位置:

这个driver.ErrBadConn是go官方SDK定义的,上文提到,database/sql包的连接池通过检测此错误来处理失效连接并自动重试。

而前面连接达梦时我们获取到的错误信息为:,并不是go官方database/sql所定义的driver.ErrBadConn.

由此可以基本判断,是达梦驱动在遇到连接问题时未按照标准的driver.ErrBadConn返回而导致。

解法1:sqlproxy主动检测失效连接,开一个定时器,通过扫描来监听db实例的连接状态,发现异常主动重连。代码大概如下所示:

  • 优点:不依赖于具体驱动的实现。
  • 缺点:在database/sql连接池已经提供了一种方法机制的基础上,这样做明显有些功能冗余。而且每个db实例都需要单独来扫,有一定有开销。

解法2:修改dm驱动。将dm驱动中相关API函数返回的统一改为driver.ErrBadConn再返回。

  • 优点:和go官方解决此问题的方法对齐,更加合理。
  • 缺点:dm驱动变成了定制,会给后续更新dm驱动带来不便。

我们还是倾向于更合理的解决方法,选择了方法2,至于相应的弊端,准备在达梦社区提交一个issue争取让达梦团队也配合修改。

由于dm驱动代码是混淆过的,我们难以确认communication error这个错误在其它地方是否有特殊用途,如果直接从定义的地方替换这个错误就会有风险。

比较稳妥的做法是在驱动对外公开的所有API方法中都替换下这个错误,虽然改动量多一些,但结果可控。具体做法为:

  • 定义一个replaceError函数,如果是网络连接类错误就替换成标准的driver.ErrBadConn。

对于以下公开的API方法,都在返回err前替换错误码:

  • Query 和 QueryContext
  • Exec 和 ExecContext
  • Prepare 和 PrepareContext
  • Ping
  • Begin 和 BeginTx
  • Commit
  • Rollback

代码改动示例如下:

运行后,在非事务场景下运行正常,在事务场景下偶现这个错误:

到此这篇达梦连接数据库jdbc(达梦数据库连接池)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • lda主题模型分析微博数据(lda主题模型文本分类)2026-04-08 11:45:10
  • 数据库oracle安装步骤(oracle数据库安装教程)2026-04-08 11:45:10
  • 中文资源数据库8(中文资源数据库8在线电影大全)2026-04-08 11:45:10
  • 达梦数据库端口(达梦数据库端口号被占用)2026-04-08 11:45:10
  • dm管理工具创建用户(dm管理工具导入数据)2026-04-08 11:45:10
  • point数据分析训练营(point数据分析的课程怎么样)2026-04-08 11:45:10
  • 学术数据库官网(学术数据库官网下载)2026-04-08 11:45:10
  • 大数据课程思政案例(大数据课程思政案例题目)2026-04-08 11:45:10
  • 英文的文献数据库有哪些(英文文献常用数据库)2026-04-08 11:45:10
  • ad9910中文手册(ad9959中文数据手册)2026-04-08 11:45:10
  • 全屏图片