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 GRANT用户授权的实现
Jun 18 MySQL
MySQL8.0.18配置多主一从
Jun 21 MySQL
MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函数的使用详解
Jun 26 MySQL
MySQL系列之六 用户与授权
Jul 02 MySQL
深入解析MySQL索引数据结构
Oct 16 MySQL
浅谈redis的过期时间设置和过期删除机制
Mar 18 MySQL
进阶篇之linux环境下安装MySQL数据库
Apr 09 MySQL
Mysql 8.x 创建用户以及授予权限的操作记录
Apr 18 MySQL
Mysql查询时间区间日期列表,不会由于数据表数据影响
Apr 19 MySQL
解决Mysql报错 Table 'mysql.user' doesn't exist
May 06 MySQL
SQLServer常见数学函数梳理总结
Aug 05 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
海贼王动画变成“真人”后,凯多神还原,雷利太帅了!
2020/04/09 日漫
Zend Framework自定义Helper类相关注意事项总结
2016/03/14 PHP
php+MySql实现登录系统与输出浏览者信息功能
2016/07/01 PHP
PHP中“=>
2019/03/01 PHP
javascript中的undefined 与 null 的区别  补充篇
2010/03/17 Javascript
JavaScript中变量提升 Hoisting
2012/07/03 Javascript
setinterval()与clearInterval()JS函数的调用方法
2015/01/21 Javascript
javascript格式化json显示实例分析
2015/04/21 Javascript
让JavaScript中setTimeout支持链式操作的方法
2015/06/19 Javascript
基于JavaScript实现定时跳转到指定页面
2016/01/01 Javascript
AngularJS全局scope与Isolate scope通信用法示例
2016/11/22 Javascript
在vue中获取dom元素内容的方法
2017/07/10 Javascript
纯js实现的积木(div层)拖动功能示例
2017/07/19 Javascript
Python中无限元素列表的实现方法
2014/08/18 Python
Python Tkinter基础控件用法
2014/09/03 Python
Python使用logging结合decorator模式实现优化日志输出的方法
2016/04/16 Python
python使用多进程的实例详解
2018/09/19 Python
Python turtle画图库&&画姓名实例
2020/01/19 Python
pandas中的数据去重处理的实现方法
2020/02/10 Python
python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例
2020/03/18 Python
python使用梯度下降算法实现一个多线性回归
2020/03/24 Python
Python面向对象实现方法总结
2020/08/12 Python
CSS3实现网站商品展示效果图
2020/01/18 HTML / CSS
canvas仿写贝塞尔曲线的示例代码
2017/12/29 HTML / CSS
美国礼品卡商城: Gift Card Mall
2017/08/25 全球购物
英国婴儿和儿童服装网站:Vertbaudet
2018/04/02 全球购物
美国购买肉、鸭、家禽、鹅肝和熟食网站:D’Artagnan
2018/11/13 全球购物
乌克兰机票、铁路和巴士票、酒店搜索、保险:Tickets.ua
2020/01/11 全球购物
酒店开业庆典主持词
2014/03/21 职场文书
幼儿园小班评语
2014/04/18 职场文书
合伙购房协议样本
2014/10/06 职场文书
邀请书模板
2015/02/02 职场文书
雷锋的故事观后感
2015/06/10 职场文书
幼儿园庆元旦主持词
2015/07/06 职场文书
教师研修随笔感言
2015/11/18 职场文书
从np.random.normal()到正态分布的拟合操作
2021/06/02 Python