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 用户权限管理
Apr 20 MySQL
MySql存储过程之逻辑判断和条件控制
May 26 MySQL
如何自己动手写SQL执行引擎
Jun 02 MySQL
MySQL系列之四 SQL语法
Jul 02 MySQL
浅谈MySQL之select优化方案
Aug 07 MySQL
MySQL七大JOIN的具体使用
Feb 28 MySQL
一条 SQL 语句执行过程
Mar 17 MySQL
MySQL如何快速创建800w条测试数据表
Mar 17 MySQL
Mysql如何实现不存在则插入,存在则更新
Mar 25 MySQL
MySQL数据库安装方法与图形化管理工具介绍
May 30 MySQL
mysql通过group by分组取最大时间对应数据的两种有效方法
Sep 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 dirname(__FILE__) 获取当前文件的绝对路径
2011/06/28 PHP
php实现的美国50个州选择列表实例
2015/04/20 PHP
PHP读取配置文件类实例(可读取ini,yaml,xml等)
2015/07/28 PHP
prototype1.4中文手册
2006/09/22 Javascript
通过ifame指向的页面高度调整iframe的高度
2006/10/05 Javascript
了解jQuery技巧来提高你的代码(个人觉得那个jquery的手册很不错)
2012/02/10 Javascript
中文路径导致unitpngfix.js不正常的解决方法
2013/06/26 Javascript
导入extjs、jquery 文件时$使用冲突问题解决方法
2014/01/14 Javascript
jQuery 动态云标签插件
2014/11/11 Javascript
一个用jquery写的判断div滚动条到底部的方法【推荐】
2016/04/29 Javascript
基于Bootstrap的Metronic框架实现条码和二维码的生成及打印处理操作
2016/08/29 Javascript
如何提高数据访问速度
2016/12/26 Javascript
jquery——九宫格大转盘抽奖实例
2017/01/16 Javascript
深究AngularJS如何获取input的焦点(自定义指令)
2017/06/12 Javascript
基于vue中解决v-for使用报红并出现警告的问题
2018/03/03 Javascript
JavaScript树的深度优先遍历和广度优先遍历算法示例
2018/07/30 Javascript
Vue.js中 v-model 指令的修饰符详解
2018/12/03 Javascript
如何在Vue.js中实现标签页组件详解
2019/01/02 Javascript
小程序实现多列选择器
2019/02/15 Javascript
JavaScript实现页面中录音功能的方法
2019/06/04 Javascript
js实现淘宝首页的banner栏效果
2019/11/26 Javascript
JavaScript canvas仿代码流瀑布
2020/02/10 Javascript
[32:30]夜魇凡尔赛茶话会 第一期01:谁是卧底
2021/03/11 DOTA
举例讲解Python中metaclass元类的创建与使用
2016/06/30 Python
Python面向对象之类的定义与继承用法示例
2019/01/14 Python
Python控制Firefox方法总结
2019/06/03 Python
关于Python内存分配时的小秘密分享
2019/09/05 Python
Python virtualenv虚拟环境实现过程解析
2020/04/18 Python
python 操作mysql数据中fetchone()和fetchall()方式
2020/05/15 Python
加拿大女包品牌:Matt & Nat
2017/05/12 全球购物
工程项目经理岗位职责
2013/12/15 职场文书
国际贸易专业个人职业生涯规划
2014/02/15 职场文书
高等教育专业自荐信范文
2014/03/26 职场文书
2014最新毕业证代领委托书
2014/09/26 职场文书
2014高三学生考试作弊检讨书
2014/12/14 职场文书
JavaScript函数柯里化
2021/11/07 Javascript