jdbc中自带MySQL 连接池实践示例


Posted in MySQL onJuly 23, 2022

引言

在上期文章自定义 MySQL 连接池中,我提到了没找到一个特别合适的 MySQL 连接池实现,所以自己写了一个基于通用池化框架commons-pool2的 MySQL 连接池,并且模仿了 Go 语言的gorm框架设计思路,把的操作不暴露给用户,只处理用户发来的 SQL 语句的思路,封装了一个com.funtester.db.mysql.MysqlPool

可惜打脸的事情来的太快了,在录制视频的时候偶然发现了 Intellij 代码提示有个com.mysql.cj.jdbc.MysqlConnectionPoolDataSource的类。这还了得,看名字就知道是我想要的那款。

经过查阅资料,好像也没搜到太多详细的资料。看官方的文档,也是遮遮掩掩,仿佛并不很推荐这个实现。关于 MySQL 连接池的管理,在 spring 语境下,应该有相当多更好的实践。但是对于测试来讲,那些太重,不太适合脚本化使用。不管怎样,我还是注意到了这个 MySQL 连接池的实现类。

关于它的名字,我在 stackoverflow 看到有人讨论,表示说叫它 MySQL 连接池并不恰当,因为它只是高效管理了连接的资源使用,并没有池化。这一点在我实测中也发现了,使用获取连接的时候,一直都是在创建新的连接。然后再连接空闲时间超过了设置之后,回收掉这个连接,回收的方法就是调用close()方法。

对于一般池化技术来讲,就是为了解决重用问题。如果连接并不重用,而是进行高效资源回收管理,其实并不算一个非常优秀的解决方案。

下面是com.mysql.cj.jdbc.MysqlConnectionPoolDataSource使用实践,比较简单,API 倒是挺多的,但是大多数都用不到。

package com.funtest.groovytest
import com.funtester.frame.SourceCode
import com.mysql.cj.jdbc.MysqlConnectionPoolDataSource
class MysqlPoolTe extends SourceCode {
    public static void main(String[] args) {
        def query = "select * from testers limit 2;"
        def source = new MysqlConnectionPoolDataSource()
        source.setServerName("localhost")
        source.setPort(3306)
        source.setUser("root")
        source.setPassword("root123456")
        source.setDatabaseName("funtester")
        source.setAllowMultiQueries(true)
        def connection = source.getPooledConnection()
        def statement = connection.getConnection().createStatement()
        while (true) {
            sleep(1)
            def query = statement.executeQuery(query)
            while (query.next()) {
                output query.getString("name")
            }
        }
    }
}

这里有个很容易的坑,就是有个setURL()还有一个setUrl(),其实这两个没有任何区别,我只能说可能为了兼容旧版本把。还有就是设置了 URL 之后,好像 database 设置不起作用了,也是妙明感觉设计真糟心,所以在上面的案例中我也没有用到这俩方法。

下面是我的测试结果,如图所示创建了超级多的线程,但是一直连接的只有很少。大概是经过几秒钟就会被回收一次,但是总创建数依旧非常高。

jdbc中自带MySQL 连接池实践示例

以后大概率我不会使用这个com.mysql.cj.jdbc.MysqlConnectionPoolDataSource实现类,依旧会继续完善自己的连接池功能。

以上就是jdbc中自带MySQL 连接池实践示例的详细内容,更多关于jdbc MySQL 连接池的资料请关注三水点靠木其它相关文章!


Tags in this post...

MySQL 相关文章推荐
MySQL基础(一)
Apr 05 MySQL
MySQL数据库压缩版本安装与配置详细教程
May 21 MySQL
MySQL触发器的使用
May 24 MySQL
MySQL 常见存储引擎的优劣
Jun 02 MySQL
Mysql数据库值的添加、修改、删除及清空操作实例
Jun 20 MySQL
mysql5.6主从搭建以及不同步问题详解
Dec 04 MySQL
详解MySQL中timestamp和datetime时区问题导致做DTS遇到的坑
Dec 06 MySQL
Mysql中有关Datetime和Timestamp的使用总结
Dec 06 MySQL
MySQL七大JOIN的具体使用
Feb 28 MySQL
MySQL的存储函数与存储过程的区别解析
Apr 08 MySQL
MySQL主从切换的超详细步骤
Jun 28 MySQL
MySQL分布式恢复进阶
Jul 23 MySQL
MySQL池化框架学习接池自定义
Jul 23 #MySQL
mysql sock文件存储了什么信息
Jul 15 #MySQL
mysql sock 文件解析及作用讲解
Jul 15 #MySQL
mysqldump进行数据备份详解
Jul 15 #MySQL
MySQL的表级锁,行级锁,排它锁和共享锁
Jul 15 #MySQL
MySQL事务的隔离级别详情
Jul 15 #MySQL
MySQL事务的ACID特性以及并发问题方案
Jul 15 #MySQL
You might like
php strnatcmp()函数的用法总结
2013/11/27 PHP
浅谈使用PHP开发微信支付的流程
2015/10/04 PHP
ThinkPHP实现附件上传功能
2017/04/27 PHP
浅谈PHP接入(第三方登录)QQ登录 OAuth2.0 过程中遇到的坑
2017/10/13 PHP
Laravel框架学习笔记之批量更新数据功能
2019/05/30 PHP
PHP读取文件或采集时解决中文乱码
2021/03/09 PHP
Js 获取当前日期时间及其它操作实现代码
2021/03/04 Javascript
JavaScript 继承机制的实现(待续)
2010/05/18 Javascript
JavaScript根据数据生成百分比图和柱状图的实例代码
2013/07/14 Javascript
js图片向右一张张滚动效果实例代码
2013/11/23 Javascript
收集json解析的四种方法分享
2014/01/17 Javascript
让网站自动生成章节目录索引的多个js代码
2018/01/07 Javascript
在 vue-cli v3.0 中使用 SCSS/SASS的方法
2018/06/14 Javascript
详解使用webpack+electron+reactJs开发windows桌面应用
2019/02/01 Javascript
vue数据初始化initState的实例详解
2019/04/11 Javascript
微信小程序实现同一页面取值的方法分析
2019/04/30 Javascript
详解ng-alain动态表单SF表单项设置必填和正则校验
2019/06/11 Javascript
JavaScript对象属性操作实例解析
2020/02/04 Javascript
Python决策树分类算法学习
2017/12/22 Python
Python二维码生成识别实例详解
2019/07/16 Python
Django发送邮件和itsdangerous模块的配合使用解析
2019/08/10 Python
python多任务之协程的使用详解
2019/08/26 Python
pytorch .detach() .detach_() 和 .data用于切断反向传播的实现
2019/12/27 Python
AUC计算方法与Python实现代码
2020/02/28 Python
教育科学研究生自荐信
2013/10/09 职场文书
基层党组织建设整改方案
2014/09/16 职场文书
2014年最新学校运动会广播稿
2014/09/17 职场文书
大学生见习报告范文
2014/11/03 职场文书
个人学习总结范文
2015/02/15 职场文书
确保工程质量承诺书
2015/04/29 职场文书
让世界充满爱观后感
2015/06/10 职场文书
mybatis使用oracle进行添加数据的方法
2021/04/27 Oracle
使用tensorflow 实现反向传播求导
2021/05/26 Python
2021年国产动漫公司排行前十名,玄机科技上榜,第二推出过铠甲勇士
2022/03/18 杂记
Python OpenGL基本配置方式
2022/05/20 Python
MySQL数据库安装方法与图形化管理工具介绍
2022/05/30 MySQL