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 pt-slave-restart工具的使用简介
Apr 07 MySQL
详解MySQL 用户权限管理
Apr 20 MySQL
详解MySQL集群搭建
May 26 MySQL
解决mysql的int型主键自增问题
Jul 15 MySQL
MySQL 聚合函数排序
Jul 16 MySQL
SQL实现LeetCode(175.联合两表)
Aug 04 MySQL
MySQL定时备份数据库(全库备份)的实现
Sep 25 MySQL
MySQL磁盘碎片整理实例演示
Apr 03 MySQL
MySQL创建管理HASH分区
Apr 13 MySQL
MySQL索引 高效获取数据的数据结构
May 02 MySQL
MySQL导致索引失效的几种情况
Jun 25 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
PHP中json_encode、json_decode与serialize、unserialize的性能测试分析
2010/06/09 PHP
ubuntu10.04配置 nginx+php-fpm模式的详解
2013/06/03 PHP
php实现邮件发送并带有附件
2014/01/24 PHP
PHP goto语句简介和使用实例
2014/03/11 PHP
PHP使用CURL实现多线程抓取网页
2015/04/30 PHP
PHP闭包函数详解
2016/02/13 PHP
Yii2中关联查询简单用法示例
2016/08/10 PHP
javascript下过滤数组重复值的代码
2007/09/10 Javascript
javascript 兼容FF的onmouseenter和onmouseleave的代码
2008/07/19 Javascript
开发跨浏览器javascript常见注意事项
2009/01/01 Javascript
jQuery学习4 浏览器的事件模型
2010/02/07 Javascript
JavaScript高级程序设计 错误处理与调试学习笔记
2011/09/10 Javascript
分别用marquee和div+js实现首尾相连循环滚动效果,仅3行代码
2011/09/21 Javascript
javascript开发随笔一 preventDefault的必要
2011/11/25 Javascript
通过正则格式化url查询字符串实现代码
2012/12/28 Javascript
hover的用法及live的用法介绍(鼠标悬停效果)
2013/03/29 Javascript
jquery ready(fn)事件使用介绍
2013/08/21 Javascript
js获取某元素的class里面的css属性值代码
2014/01/16 Javascript
javascript与Python快速排序实例对比
2015/08/10 Javascript
jQuery prototype冲突的2种解决方法(附demo示例下载)
2016/01/21 Javascript
js判断radiobuttonlist的选中值显示/隐藏其它模块的实现方法
2016/08/25 Javascript
Angularjs中三种数据的绑定策略(“@”,“=”,“&”)
2016/12/23 Javascript
微信小程序 本地图片按照屏幕尺寸处理
2017/08/04 Javascript
JS猜数字游戏实例讲解
2020/06/30 Javascript
js+canvas绘制图形验证码
2020/09/21 Javascript
适用于 Vue 的播放器组件Vue-Video-Player操作
2020/11/16 Javascript
[01:57]DOTA2上海特锦赛小组赛解说单车采访花絮
2016/02/27 DOTA
解决Python selenium get页面很慢时的问题
2019/01/30 Python
scrapy数据存储在mysql数据库的两种方式(同步和异步)
2020/02/18 Python
Clarins娇韵诗美国官网:法国天然护肤品牌
2016/09/26 全球购物
卡塔尔航空官方网站:Qatar Airways
2017/02/08 全球购物
世界上最好的精品店:Shoptiques
2018/02/05 全球购物
售后求职信范文
2014/03/15 职场文书
标准的毕业生自荐信
2014/04/20 职场文书
2014年数学教研组工作总结
2014/12/06 职场文书
《王者天下》第4季首话新剧照 4月9日正式开播
2022/04/07 日漫