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 Show Profile
Apr 05 MySQL
浅谈mysql执行过程以及顺序
May 12 MySQL
详细谈谈MYSQL中的COLLATE是什么
Jun 11 MySQL
mysql获取指定时间段中所有日期或月份的语句(不设存储过程,不加表)
Jun 18 MySQL
Innodb存储引擎中的后台线程详解
Apr 03 MySQL
MySQL数据库查询进阶之多表查询详解
Apr 08 MySQL
MySQ InnoDB和MyISAM存储引擎介绍
Apr 26 MySQL
mysql 索引的数据结构为什么要采用B+树
Apr 26 MySQL
使用Mysql计算地址的经纬度距离和实时位置信息
Apr 29 MySQL
MySQL GTID复制的具体使用
May 20 MySQL
mysql数据库隔离级别详解
Jun 16 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
请离开include_once和require_once
2013/07/18 PHP
微信支付开发教程(一)微信支付URL配置
2014/05/28 PHP
PHP中的命名空间相关概念浅析
2015/01/22 PHP
PHP中substr函数字符串截取用法分析
2016/01/07 PHP
javascript 动态table添加colspan\rowspan 参数的方法
2009/07/25 Javascript
Javascript 解疑
2009/11/11 Javascript
解析window.open的使用方法总结
2013/06/19 Javascript
javascript实现动态改变层大小的方法
2015/05/14 Javascript
究竟什么是Node.js?Node.js有什么好处?
2015/05/29 Javascript
全面理解JavaScript中的闭包
2016/05/12 Javascript
深入浅析JS Function()构造函数
2016/08/22 Javascript
js面向对象实现canvas制作彩虹球喷枪效果
2016/09/24 Javascript
浅析JavaScript中作用域和作用域链
2016/12/06 Javascript
jQuery实现的checkbox级联选择下拉菜单效果示例
2016/12/26 Javascript
微信小程序tabbar不显示解决办法
2017/06/08 Javascript
微信小程序picker组件下拉框选择input输入框的实例
2017/09/20 Javascript
jquery 给动态生成的标签绑定事件的几种方法总结
2018/02/24 jQuery
vue 项目中当访问路由不存在的时候默认访问404页面操作
2020/08/31 Javascript
[47:12]TFT vs Secret Supermajor小组赛C组 BO3 第三场 6.3
2018/06/04 DOTA
分析python请求数据
2018/08/19 Python
python初学者,用python实现基本的学生管理系统(python3)代码实例
2019/04/10 Python
Python使用指定端口进行http请求的例子
2019/07/25 Python
如何在VSCode上轻松舒适的配置Python的方法步骤
2019/10/28 Python
Python模块future用法原理详解
2020/01/20 Python
猫途鹰英国网站:TripAdvisor英国(旅游社区和旅游评论)
2016/08/30 全球购物
ALLSAINTS英国官网:伦敦新锐潮流品牌
2016/09/19 全球购物
英国最大的纸工艺品商店:CraftStash
2018/12/01 全球购物
一个SQL面试题
2014/08/21 面试题
网络工程师个人的自我评价范文
2013/10/01 职场文书
经济管理专业毕业生推荐信
2013/11/11 职场文书
周年庆典邀请函范文
2014/01/23 职场文书
孝女彩金观后感
2015/06/10 职场文书
《兰兰过桥》教学反思
2016/02/20 职场文书
python数据库批量插入数据的实现(executemany的使用)
2021/04/30 Python
AJAX学习笔记
2021/05/18 Javascript
草系十大最强宝可梦,纸片人上榜,榜首大家最熟悉
2022/03/18 日漫