转载:https://www.jianshu.com/p/381c86bdbff6java
看了看druid和dbcp2的原码,发现他们都有各自存储链接的方式。git
druid :
private volatile DruidConnectionHolder[] connections;
dbcp2
private final LinkedBlockingDeque<PooledObject<T>> idleObjects = new LinkedBlockingDeque<PooledObject<T>>();
以本身的理解写了个简单的链接池
- 采用LinkedBlockingQueue管理数据库链接
- 实现javax.sql.DataSource接口
- 采用构造者设计模式
- 经过反射技术获取驱动
- 兼容MYSQL5与6驱动
- 支持配置链接池资源消耗殆尽的处理策略
- 未实现空闲链接数控制
核心源码
-
初始化链接池github
初始化链接池.png -
获取链接sql
获取链接.png -
释放链接数据库
释放链接.png -
使用链接池设计模式
使用方式.png