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数据库入门第一步之创建表
May 14 MySQL
简单了解 MySQL 中相关的锁
May 25 MySQL
浅谈MySQL之浅入深出页原理
Jun 23 MySQL
MySQL分库分表详情
Sep 25 MySQL
MySQL基于索引的压力测试的实现
Nov 07 MySQL
MySQL数据库中varchar类型的数字比较大小的方法
Nov 17 MySQL
mysql分组后合并显示一个字段的多条数据方式
Jan 22 MySQL
MySQL读取JSON转换的方式
Mar 18 MySQL
MySQL学习之基础命令实操总结
Mar 19 MySQL
mysql中如何用命令创建联合唯一索引
Apr 20 MySQL
MySQL的prepare使用以及遇到的bug
May 11 MySQL
MySQL约束(创建表时的各种条件说明)
Jun 21 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入门
2006/10/09 PHP
异步加载技术实现当滚动条到最底部的瀑布流效果
2014/09/16 PHP
PHP中Memcache操作类及用法实例
2014/12/12 PHP
PHP实现的带超时功能get_headers函数
2015/02/10 PHP
php遍历树的常用方法汇总
2015/06/18 PHP
修改WordPress中文章编辑器的样式的方法详解
2015/12/15 PHP
php+mongodb判断坐标是否在指定多边形区域内的实例
2016/10/28 PHP
PHP批量删除jQuery操作
2017/07/23 PHP
PHP实现的最大正向匹配算法示例
2017/12/19 PHP
Add Formatted Data to a Spreadsheet
2007/06/12 Javascript
document.getElementById为空或不是对象的解决方法
2010/01/24 Javascript
jquery 简短几句代码实现给元素动态添加及获取提示信息
2011/09/01 Javascript
jQuery定义插件的方法
2015/12/18 Javascript
轻松实现javascript图片轮播特效
2016/01/13 Javascript
jQuery prototype冲突的2种解决方法(附demo示例下载)
2016/01/21 Javascript
JavaScript中常见内置函数用法示例
2018/05/14 Javascript
Python基于DES算法加密解密实例
2015/06/03 Python
Python实现基本数据结构中队列的操作方法示例
2017/12/04 Python
Python常见工厂函数用法示例
2018/03/21 Python
详解PyCharm配置Anaconda的艰难心路历程
2018/08/13 Python
详解Python基础random模块随机数的生成
2019/03/23 Python
使用Python计算玩彩票赢钱概率
2019/06/26 Python
Django ORM 查询管理器源码解析
2019/08/05 Python
python Pillow图像处理方法汇总
2019/10/16 Python
Python Tornado之跨域请求与Options请求方式
2020/03/28 Python
Python socket服务常用操作代码实例
2020/06/22 Python
css3 伪元素和伪类选择器详解
2014/09/04 HTML / CSS
西班牙用户之间买卖视频游戏的平台:Wakkap
2020/03/21 全球购物
迪卡侬(Decathlon)加拿大官网:源自法国的运动专业超市
2020/11/22 全球购物
.net面试题
2016/09/17 面试题
党校培训思想汇报
2014/01/03 职场文书
三好学生个人先进事迹材料
2014/05/17 职场文书
医生党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
2015年五一劳动节活动总结
2015/02/09 职场文书
Mysql 性能监控及调优
2021/04/06 MySQL
HTML5之高度塌陷问题的解决
2022/06/01 HTML / CSS