我的编程空间,编程开发者的网络收藏夹
学习永远不晚

jdbc中自带MySQL 连接池实践示例

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

jdbc中自带MySQL 连接池实践示例

引言

在上期文章自定义 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 连接池的资料请关注我们其它相关文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

jdbc中自带MySQL 连接池实践示例

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

jdbc中自带MySQL 连接池实践示例

引言在上期文章自定义 mysql 连接池中,我提到了没找到一个特别合适的 MySQL 连接池实现,所以自己写了一个基于通用池化框架commons-pool2的 MySQL 连接池,并且模仿了 Go 语言的gorm框架设计思路,把借和还的操
2022-07-21

golang中mysql数据库连接池的示例分析

这篇文章主要介绍golang中mysql数据库连接池的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!golang的优点golang是一种编译语言,可以将代码编译为机器代码,编译后的二进制文件可以直接部署到目标
2023-06-15

MySQL实现自然连接查询的示例

目录什么是自然连接?如何使用自然连接?自然连接的注意事项自然连接的缺点类似的连接方式总结mysql是一种流行的关系型数据库管理系统,其强大的查询功能是其受欢迎的原因之一。在MySQL中,有多种查询方式可以检索和组合不同的表中的数据。其中之一
MySQL实现自然连接查询的示例
2024-09-19

编程热搜

目录