前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据库连接池的选择

数据库连接池的选择

作者头像
企鹅号小编
发布2018-01-10 10:26:21
1.5K0
发布2018-01-10 10:26:21
举报
文章被收录于专栏:企鹅号快讯企鹅号快讯

新年的第一个工作日,愿我们的2018更好!

在基于JVM的后台开发的中,在高并发场景下,往往会有一些对象,如数据库连接、线程...等对象,它的创建和初始化需要的时间比较长,当在大量使用这些对象时,如果不采取一些技术上的优化,就会造成一些效率和性能上的问题。

对于这种问题常见的简单优化办法就是使用对象池,每次创建的对象并不实际销毁,而是缓存在对象池中,下次使用的时候,不用再重新创建,可以直接从对象池的缓存中取即可,通过空间换时间,不必每次都创建和关闭对象

本文就是基于commons-pool2利用Java语言简单实现高可用的对象池,这里我没有从最底层开始造轮子,而是使用了这种开源的对象池化组件,它已经进行了很好的封装,我只是简单做一下封装和实现了部分接口而已。通过这种方式,我们可以实现各种数据库的连接池,如MySQL,Oracle,Redis,HBase,…

本系列文章首先以关系型数据库MySQL来举例实现(PS典型的数据库连接池有cp03和dbcp,Druid,Kikari…等,但这里实现的目的是为了做一个通用一点的连接池,以同样的方式来实现对其他数据库,包括非关系型数据库的连接池),后续将陆续推出各种以同样的方式实现的其他数据连接池。

1.首先简单介绍一下

Apache Common-pool2,它主要由三大模块组成:

ObjectPool、

PooledObject、

PooledObjectFactory。

具体的含义和详细的使用介绍可以参考官方文档

(这里强烈推荐阅读,才能够明白接下来文章简单描述的内容的具体含义):

http://commons.apache.org/proper/commons-pool/

API使用:

http://commons.apache.org/proper/commons-pool/apidocs/org/apache/commons/pool2/package-summary.html

2.首先对comom-pool2做一个简单的封装:

2.1写一个默认的PoolConfig配置类,其中参数是自定义一些默认参数。PoolConfig->GenericOjbectPoolConfig

2.2abstract PoolBase接下来实现一个池基类(基于PooledObjectFactory和GenericObjectPool)如对具体实现没有概念,可以参考pool2 api的实现。

PoolBase池基类的结构如下:

2.3interface ConnectionFactory 第三步实现连接池工厂类

2.4interface ConnectionPool 第四步实现一个连接池接口

2.5最后再自定义一个异常类:ConnectionException

至此,通用的连接池模块已经实现。

3.针对特定的数据库来做一个接口实现,本系列第一篇,采用MySQL来举例实现:

3.1首先第一步实现一个默认的jdbcConfig默认配置类:

3.2实现JdbcConnectionFactory

JdbcConnectionFactory类结构如下:

3.3实现jdbcConnectionPool

此时,jdbc对象连接池已经实现,接下来,我们写一个demo来演示一下,这里只是demo,所以各种参数之类的都直接写在测试类当中。

注意:实际生产环境中参数的一般都是通过配置,传递,校验等方式,获取连接池等都会通过工具类来获取与释放。

4.从本地数据库中,查询一个字段打印出来

类中方法如下(实际使用可以抽取到工具类中):

控制台显示如下:

工程目录结构如下:

数据库中有两条记录:

最后:这里没有给出具体的代码,主要是考虑到大家只要了解了具体的对象池思想,就可以去自由的使用自己的方式来实现,并不局限于使用某种编程语言的层面,当然本文也只是个人的看法和理解,并不能代表这样就是好的,欢迎大家指正和批评,有任何疑问,都可以交流和探讨。

本文来自企鹅号 - 全球大搜罗媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文来自企鹅号 - 全球大搜罗媒体

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档