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 05 MySQL
MySQL 使用SQL语句修改表名的实现
Apr 07 MySQL
MySQL Innodb关键特性之插入缓冲(insert buffer)
Apr 08 MySQL
MySQL分库分表与分区的入门指南
Apr 22 MySQL
MySQL获取所有分类的前N条记录
May 07 MySQL
MySQL 存储过程的优缺点分析
May 20 MySQL
mysql优化之query_cache_limit参数说明
Jul 01 MySQL
MySQL数据库10秒内插入百万条数据的实现
Nov 01 MySQL
分享mysql的current_timestamp小坑及解决
Nov 27 MySQL
教你使用VS Code的MySQL扩展管理数据库的方法
Jan 22 MySQL
MySQL数据库Innodb 引擎实现mvcc锁
May 06 MySQL
mysql通过group by分组取最大时间对应数据的两种有效方法
Sep 23 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 miniBB中文乱码问题解决方法
2008/11/25 PHP
php 数组的指针操作实现代码
2011/02/08 PHP
提高define性能的php扩展hidef的安装和使用
2011/06/14 PHP
PHP中文分词 自动获取关键词介绍
2012/11/13 PHP
php利用腾讯ip分享计划获取地理位置示例分享
2014/01/20 PHP
php采用file_get_contents代替使用curl实例
2014/11/07 PHP
CodeIgniter针对lighttpd服务器URL重写的方法
2015/06/10 PHP
PHP基于自增数据如何生成不重复的随机数示例
2017/05/19 PHP
异步动态加载js与css文件的js代码
2013/09/15 Javascript
JS对img标签进行优化使用onerror显示默认图像
2014/04/24 Javascript
JS逆序遍历实现代码
2014/12/02 Javascript
jQuery中hide()方法用法实例
2014/12/24 Javascript
jqueryMobile 动态添加元素,展示刷新视图的实现方法
2016/05/28 Javascript
BootStrap Fileinput初始化时的一些参数
2016/12/30 Javascript
JS跨域请求外部服务器的资源
2017/02/06 Javascript
jquery select插件异步实时搜索实例代码
2017/10/20 jQuery
JS扩展String.prototype.format字符串拼接的功能
2018/03/09 Javascript
利用Dectorator分模块存储Vuex状态的实现
2019/02/05 Javascript
wx-charts 微信小程序图表插件的具体使用
2019/08/18 Javascript
BootstrapValidator验证用户名已存在(ajax)
2019/11/08 Javascript
python基础入门学习笔记(Python环境搭建)
2016/01/13 Python
Python嵌套列表转一维的方法(压平嵌套列表)
2018/07/03 Python
python实现微信小程序自动回复
2018/09/10 Python
用Cython加速Python到“起飞”(推荐)
2019/08/01 Python
python enumerate内置函数用法总结
2020/01/07 Python
浅谈优化Django ORM中的性能问题
2020/07/09 Python
详解Python3.8+PyQt5+pyqt5-tools+Pycharm配置详细教程
2020/11/02 Python
使用Pytorch搭建模型的步骤
2020/11/16 Python
python 批量下载bilibili视频的gui程序
2020/11/20 Python
解决pycharm不能自动保存在远程linux中的问题
2021/02/06 Python
html Table 表头固定的实现
2019/01/22 HTML / CSS
浅析数据存储的三种方式 cookie sessionstorage localstorage 的异同
2020/06/04 HTML / CSS
大学生演讲稿范文
2014/01/11 职场文书
先进工作者推荐材料
2014/12/23 职场文书
基于Nginx实现限制某IP短时间访问次数
2021/03/31 Servers
MySQL Innodb关键特性之插入缓冲(insert buffer)
2021/04/08 MySQL