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 12 MySQL
如何用Navicat操作MySQL
May 12 MySQL
MySQL中出现乱码问题的终极解决宝典
May 26 MySQL
解决Mysql的left join无效及使用的注意事项说明
Jul 01 MySQL
MySQL系列之四 SQL语法
Jul 02 MySQL
mysql如何能有效防止删库跑路
Oct 05 MySQL
mysql事务对效率的影响分析总结
Oct 24 MySQL
MySQL中CURRENT_TIMESTAMP的使用方式
Nov 27 MySQL
Mysql存储过程、触发器、事件调度器使用入门指南
Jan 22 MySQL
MySQL高级进阶sql语句总结大全
Mar 16 MySQL
如何创建一个创建MySQL数据库中的datetime类型
Mar 21 MySQL
mysql的单列多值存储实例详解
Apr 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 什么是PEAR?(第三篇)
2009/03/19 PHP
php中获取主机名、协议及IP地址的方法
2014/11/18 PHP
windows中为php安装mongodb与memcache
2015/01/06 PHP
php获取汉字拼音首字母的方法
2015/10/21 PHP
PHP使用SOAP扩展实现WebService的方法
2016/04/01 PHP
PHP中Socket连接及读写数据超时问题分析
2016/07/19 PHP
phpstorm最新激活码分享亲测phpstorm2020.2.3版可用
2020/11/22 PHP
Exitjs获取DataView中图片文件名
2009/11/26 Javascript
js实时监听文本框状态的方法
2011/04/26 Javascript
下载文件个别浏览器文件名乱码解决办法
2013/03/19 Javascript
JS获取各种浏览器窗口大小的方法
2014/01/14 Javascript
js中的setInterval和setTimeout使用实例
2014/05/09 Javascript
jquery实现公告翻滚效果
2015/02/27 Javascript
jQuery基于图层模仿五星星评价功能的方法
2015/05/07 Javascript
js实现一个链接打开两个链接地址的方法
2015/05/12 Javascript
详解JavaScript基于面向对象之继承实例
2015/12/16 Javascript
JavaScript模拟数组合并concat
2016/03/06 Javascript
javascript实现消灭星星小游戏简单版
2016/11/15 Javascript
深入理解javascript中concat方法
2016/12/12 Javascript
Bootstrap组合上、下拉框简单实现代码
2017/03/06 Javascript
jQuery实现点击关注和取消功能
2017/07/03 jQuery
JavaScript内存泄漏的处理方式
2017/11/20 Javascript
使用JS获取SessionStorage的值
2018/01/12 Javascript
Javascript数组方法reduce的妙用之处分享
2019/06/10 Javascript
VueCli4项目配置反向代理proxy的方法步骤
2020/05/17 Javascript
javascript this指向相关问题及改变方法
2020/11/19 Javascript
[52:27]2018DOTA2亚洲邀请赛 3.31 小组赛B组 paiN vs Secret
2018/04/01 DOTA
python的id()函数介绍
2013/02/10 Python
python使用xmlrpclib模块实现对百度google的ping功能
2015/06/02 Python
python集合的新增元素方法整理
2020/12/07 Python
Square Off美国/加拿大:世界上最聪明的国际象棋棋盘
2018/12/06 全球购物
Bed Bath & Beyond加拿大官网:购买床上用品、浴巾、厨房电器等
2019/10/04 全球购物
餐饮加盟计划书
2014/01/10 职场文书
《陶罐和铁罐》教学反思
2014/02/19 职场文书
慰问信(范文3篇)
2019/10/23 职场文书
win server2012 r2服务器共享文件夹如何设置
2022/06/21 Servers