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 24 MySQL
浅谈mysql执行过程以及顺序
May 12 MySQL
MySQL查看表和清空表的常用命令总结
May 26 MySQL
MySql存储过程之逻辑判断和条件控制
May 26 MySQL
浅谈MySQL next-key lock 加锁范围
Jun 07 MySQL
mysql sum(if())和count(if())的用法说明
Jan 18 MySQL
深入讲解数据库中Decimal类型的使用以及实现方法
Feb 15 MySQL
一文了解MySQL二级索引的查询过程
Feb 24 MySQL
一次SQL如何查重及去重的实战记录
Mar 13 MySQL
MySQL数据库事务的四大特性
Apr 20 MySQL
MySQL示例讲解数据库约束以及表的设计
Jun 16 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实现的oracle分页函数实例
2016/01/25 PHP
PHP实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
JavaScript 对Cookie 操作的封装小结
2009/12/31 Javascript
jquery 仿QQ校友的DIV模拟窗口效果源码
2010/03/24 Javascript
在JavaScript中获取请求的URL参数[正则]
2010/12/25 Javascript
使用js判断数组中是否包含某一元素(类似于php中的in_array())
2013/12/12 Javascript
Node.js模拟浏览器文件上传示例
2014/03/26 Javascript
jQuery trigger()方法用法介绍
2015/01/13 Javascript
jquery选择器简述
2015/08/31 Javascript
使用 bootstrap modal遇到的问题小结
2016/11/09 Javascript
nodeJs实现基于连接池连接mysql的方法示例
2018/02/10 NodeJs
bootstrap 路径导航 分页 进度条的实例代码
2018/08/06 Javascript
浅谈Vue render函数在ElementUi中的应用
2018/09/06 Javascript
NodeJS模块与ES6模块系统语法及注意点详解
2019/01/04 NodeJs
JS实现移动端在线签协议功能
2019/08/22 Javascript
微信小程序tabBar设置实例解析
2019/11/14 Javascript
微信小程序实现点击按钮后修改颜色
2019/12/05 Javascript
手把手教您实现react异步加载高阶组件
2020/04/07 Javascript
[57:12]完美世界DOTA2联赛循环赛 Inki vs Matador BO2第一场 10.31
2020/11/02 DOTA
[01:01:14]完美世界DOTA2联赛PWL S2 SZ vs Rebirth 第一场 11.21
2020/11/23 DOTA
利用python发送和接收邮件
2016/09/27 Python
Sanic框架流式传输操作示例
2018/07/18 Python
详解python算法之冒泡排序
2019/03/05 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
2020/05/20 Python
Python如何脚本过滤文件中的注释
2020/05/27 Python
Python 解决相对路径问题:"No such file or directory"
2020/06/05 Python
Python plt 利用subplot 实现在一张画布同时画多张图
2021/02/26 Python
美国女性服饰销售网站:Nasty Gal(坏女孩)
2016/07/26 全球购物
美国在线眼镜商城:Eyeglasses.com
2017/06/26 全球购物
墨尔本照明批发商店:Mica Lighting
2017/12/28 全球购物
党的群众路线教育实践活动党员个人整改措施
2014/10/27 职场文书
2014年培训工作总结范文
2014/11/27 职场文书
2015纪念九一八事变84周年演讲稿
2015/03/19 职场文书
电影焦裕禄观后感
2015/06/09 职场文书
MySQL 如何分析查询性能
2021/05/12 MySQL
关于PHP数组迭代器的使用方法实例
2021/11/17 PHP