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 相关文章推荐
数据库的高级查询六:表连接查询:外连接(左外连接,右外连接,UNION关键字,连接中ON与WHERE的不同)
Apr 05 MySQL
Mysql服务添加 iptables防火墙策略的方案
Apr 29 MySQL
MySQL sql_mode的使用详解
May 08 MySQL
MySQL库表名大小写的选择
Jun 05 MySQL
MySQL如何使用使用Xtrabackup进行备份和恢复
Jun 21 MySQL
MySQL系列之开篇 MySQL关系型数据库基础概念
Jul 02 MySQL
sql注入教程之类型以及提交注入
Aug 02 MySQL
Mysql8.0递归查询的简单用法示例
Aug 04 MySQL
MySQL数据库查询进阶之多表查询详解
Apr 08 MySQL
mysql 排序失效
May 20 MySQL
mysql中关键词exists的用法实例详解
Jun 10 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
新浪新闻小偷
2006/10/09 PHP
基于mysql的bbs设计(二)
2006/10/09 PHP
PHP数据类型之布尔型的介绍
2013/04/28 PHP
用mysql_fetch_array()获取当前行数据的方法详解
2013/06/05 PHP
PHP过滤器 filter_has_var() 函数用法实例分析
2020/04/23 PHP
JavaScript charCodeAt方法入门实例(用于取得指定位置字符的Unicode编码)
2014/10/17 Javascript
jquery验证手机号是否正确实例讲解
2015/11/17 Javascript
jquery可定制的在线UEditor编辑器
2015/11/17 Javascript
Extjs让combobox写起来简洁又漂亮
2017/01/05 Javascript
如何给ss bash 写一个 WEB 端查看流量的页面
2017/03/23 Javascript
微信小程序网络请求的封装与填坑之路
2017/04/01 Javascript
js获取指定时间的前几秒
2017/04/05 Javascript
js图片轮播插件的封装
2017/07/21 Javascript
使用Vue-Router 2实现路由功能实例详解
2017/11/14 Javascript
vue+swiper实现侧滑菜单效果
2017/12/28 Javascript
webpack-mvc 传统多页面组件化开发详解
2019/05/07 Javascript
js实现树形数据转成扁平数据的方法示例
2020/02/27 Javascript
JQuery事件冒泡和默认行为代码实例
2020/05/13 jQuery
Postman动态获取返回值过程详解
2020/06/30 Javascript
[05:16]《大圣!大圣》——DOTA2新英雄齐天大圣配音李世宏老师专访
2016/12/13 DOTA
python中urllib模块用法实例详解
2014/11/19 Python
python实现一次创建多级目录的方法
2015/05/15 Python
python使用Tkinter实现在线音乐播放器
2018/01/30 Python
在Python中将函数作为另一个函数的参数传入并调用的方法
2019/01/22 Python
用Python从0开始实现一个中文拼音输入法的思路详解
2019/07/20 Python
face++与python实现人脸识别签到(考勤)功能
2019/08/28 Python
python爬虫之遍历单个域名
2019/11/20 Python
pytorch自定义二值化网络层方式
2020/01/07 Python
python实现将range()函数生成的数字存储在一个列表中
2020/04/02 Python
PHP笔试题
2012/02/22 面试题
银行自荐信范文
2013/10/07 职场文书
Python 读写 Matlab Mat 格式数据的操作
2021/05/19 Python
Java实现简易的分词器功能
2021/06/15 Java/Android
详解Python函数print用法
2021/06/18 Python
Ajax实现三级联动效果
2021/10/05 Javascript
python前后端自定义分页器
2022/04/13 Python