“多态”的数据库连接池实现

需求

数据库连接的池化管理

支持不同数据源链接池化处理

问题

如何维护链接对象

如何区分不同数据源池化

如何实现资源同步问题

分析

如何维护对象

使用阻塞队列实现对象存储,数据结构采用LinkedBlockingDeque(同步集合,内部线程序安全)。

如何区分不同数据源池化

即席查询中,针对不同的数据库链接,会创建不同的的数据库链接对象(connection 是线程不安全的)。为了保证安全,可以使用ThreadLocal来维护。不同的connection要缓存,并且在空闲时可以复用。内部使用数据结构ConcurrentHashMap同步集合map来维护不同数据源链接。

如何实现同步

如上,使用同步集合实现共享资源(数据库链接connection)的线程安全。

实现

思路

涉及到资源的创建,释放等。最初,依据自己的方式实现。发现底层需要考虑的同步,以及淘汰策略问题。写了个雏形,感觉不满意。于是,想到apache有一个专门的对象池处理组件。common-pool2。然后,查阅了相关资料。果然满足底层需求。其中相关组件介绍,这里不展开。common-pool2对象池(连接池)的介绍及使用,这篇文章将各组件介绍的比较详细,可参考。redis的java实现jedis底层就是借用commons-pool2实现的。

然后,使用文中介绍的GenericKeyedObjectPool,其内部就是一组k-v模型。刚好满足本文需求,实现不同数据源链接池化处理

设计

类图

ConnectionConfig:数据链接配置

ConnectionPoolConfig:数据库连接池配置

ConnectionFactory:数据库链接

ConnectionPool:数据库连接池

ConnectionProvider:数据库链接接口

ConnectionProviderImpl:数据库链接实现

源码地址:

https://github.com/alanzhang211/common-db-pool

动动小手指,关注一下,是给予我最大的动力。

本文来自企鹅号 - 补愚者说媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏沈唁志

ThinkPHP-PHP开发中的主流框架

89640
来自专栏开发与安全

linux环境常用的性能监控和协助开发调试工具

linux有诸多优秀的工具帮助我们分析服务器各项性能指标和协助开发调试工作。下面只列举比较基础的命令,且一般是集成在linux环境中而不需再次安装的...

43810
来自专栏Danny的专栏

VMware10下安装CentOS 6.5+基本网络配置

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/...

14630
来自专栏代码世界

Python之IO模型

IO模型介绍 为了更好地了解IO模型,我们需要事先回顾下:同步、异步、阻塞、非阻塞     同步(synchronous) IO和异步(asynchronous...

449110
来自专栏Vamei实验室

Linux的内存分页管理

作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁转载

19820
来自专栏编程

2018 年了,你还是只会 npm install 吗?

你真的了解 npm 吗 ?重新介绍 npm 。

3.9K160
来自专栏马涛涛的专栏

MVC中的M(model)、MVC总结

这篇博客的源代码是我的正在写的在线简历,博客是继上一篇写的 完整代码(项目暂未完成) 预览地址

24830
来自专栏Java帮帮-微信公众号-技术文章全总结

15.MVC/业务代表模式

15.MVC/业务代表模式 MVC 模式 MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开...

44870
来自专栏我是攻城师

高性能服务端漫谈

37130
来自专栏IT笔记

Struts2升级版本至2.5.10,高危漏洞又来了

前情概要 漏洞年年有,最近特别多。2017年3月6日,Apache Struts2被曝存在远程命令执行漏洞,漏洞编号:S2-045,CVE编号:CVE-2017...

35530

扫码关注云+社区

领取腾讯云代金券