文章首发于:clawhub.club


分析

看了看druid和dbcp2的原码,发现他们都有各自存储连接的方式。

druid :

1
private volatile DruidConnectionHolder[] connections;

dbcp2

1
2
private final LinkedBlockingDeque<PooledObject<T>> idleObjects =
new LinkedBlockingDeque<PooledObject<T>>();

以自己的理解写了个简单的连接池

  • 采用LinkedBlockingQueue管理数据库连接
  • 实现javax.sql.DataSource接口
  • 采用构造者设计模式
  • 通过反射技术获取驱动
  • 兼容MYSQL5与6驱动
  • 支持配置连接池资源消耗殆尽的处理策略
  • 未实现空闲连接数控制

核心源码

  1. 初始化连接池
    初始化连接池.png
  2. 获取连接
    获取连接.png
  3. 释放连接
    释放连接.png
  4. 使用连接池
    使用方式.png

github源码地址

ClawDataSource