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