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 22 MySQL
Mysql服务添加 iptables防火墙策略的方案
Apr 29 MySQL
MySql新手入门的基本操作汇总
May 13 MySQL
如何使用分区处理MySQL的亿级数据优化
Jun 18 MySQL
如何搭建 MySQL 高可用高性能集群
Jun 21 MySQL
MySQL8.0的WITH查询详情
Aug 30 MySQL
面试被问select......for update会锁表还是锁行
Nov 11 MySQL
解析MySQL索引的作用
Mar 03 MySQL
讲解MySQL增删改操作
May 06 MySQL
MYSQL事务的隔离级别与MVCC
May 25 MySQL
mysql字段为NULL索引是否会失效实例详解
May 30 MySQL
MySQL实现用逗号进行拼接、以逗号进行分割
Dec 24 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
mysql 查询指定日期时间内sql语句实现原理与代码
2012/12/16 PHP
php学习笔记之面向对象编程
2012/12/29 PHP
javascript 面向对象编程 万物皆对象
2009/09/17 Javascript
JavaScript 浮点数运算 精度问题
2009/10/06 Javascript
jQuery实现的多屏图像图层切换效果实例
2015/05/07 Javascript
JavaScript学习小结(一)——JavaScript入门基础
2015/09/02 Javascript
js自定义select下拉框美化特效
2016/05/12 Javascript
Bootstrap页面布局基础知识全面解析
2016/06/13 Javascript
微信小程序  modal弹框组件详解
2016/10/27 Javascript
Node.js常用工具之util模块
2017/03/09 Javascript
微信小程序之获取当前位置经纬度以及地图显示详解
2017/05/09 Javascript
jquery+css实现侧边导航栏效果
2017/06/12 jQuery
axios发送post请求springMVC接收不到参数的解决方法
2018/03/05 Javascript
vue项目引入Iconfont图标库的教程图解
2018/10/24 Javascript
require.js 加载过程与使用方法介绍
2018/10/30 Javascript
Vee-validate 父组件获取子组件表单校验结果的实例代码
2019/05/20 Javascript
解决Vue调用springboot接口403跨域问题
2019/09/02 Javascript
[01:10]DOTA2次级职业联赛 - Fly战队宣传片
2014/12/01 DOTA
python检测某个变量是否有定义的方法
2015/05/20 Python
python基本语法练习实例
2017/09/19 Python
Python中Scrapy爬虫图片处理详解
2017/11/29 Python
想学python 这5本书籍你必看!
2018/12/11 Python
使用keras实现densenet和Xception的模型融合
2020/05/23 Python
pycharm2020.1.2永久破解激活教程,实测有效
2020/10/29 Python
python中Mako库实例用法
2020/12/31 Python
Python3爬虫RedisDump的安装步骤
2021/02/20 Python
营销与策划应届生求职信
2013/11/04 职场文书
毕业生就业推荐信范文
2013/12/01 职场文书
大四学生思想汇报
2014/01/13 职场文书
大学四年个人自我小结
2014/03/05 职场文书
技术总监管理岗位职责
2014/03/09 职场文书
社会公德演讲稿
2014/05/20 职场文书
党员承诺书怎么写
2014/05/20 职场文书
企业员工薪酬方案
2014/06/04 职场文书
化学教育专业自荐信
2014/07/04 职场文书
5人制售《绝地求生》游戏外挂获利500多万元 被判刑
2022/03/31 其他游戏