Alibaba Druid 源码阅读(二) 数据库连接池实现初步探索

Alibaba Druid 源码阅读(二) 数据库连接池实现初步探索


简介

在上篇文章中,了解了连接池的应用场景和本地运行了示例,本篇文章中,我们尝试来探索下Alibaba Druid数据库连接池的整体实现思路

连接池的大体实现思路

查询了阅读了一些资料:下面两篇还是写的比较好的

文中实现一个数据库连接池的核心如下:

连接池设计的基本原理是这样的:

(1)建立连接池对象(服务启动)。

(2)按照事先指定的参数创建初始数量的连接(即:空闲连接数)。

(3)对于一个访问请求,直接从连接池中得到一个连接。如果连接池对象中没有空闲的连接,且连接数没有达到最大(即:最大活跃连接数),创建一个新的连接;如果达到最大,则设定一定的超时时间,来获取连接。

(4)运用连接访问服务。

(5)访问服务完成,释放连接(此时的释放连接,并非真正关闭,而是将其放入空闲队列中。如实际空闲连接数大于初始空闲连接数则释放连接)。

(6)释放连接池对象(服务停止、维护期间,释放连接池对象,并释放所有连接)。

摘抄自:一文读懂连接池技术原理、设计与实现(Python)

上面的配合上文中Python代码实现,感觉还是能体会到实现一个连接池的关键点的

源码探索

基于上面的思路,我们看出连接的获取和释放应该是实现的关键,下面我们开始尝试寻找下相关的代码

运行示例,debug入口

首先得找突破点,翻一翻test文件,找到下面一个东西:src/test/java/com/alibaba/druid/pool/demo/Demo0.java

public class Demo0 extends TestCase {
   

    private String jdbcUrl;
    private String user;
    private String password;
    private String driverClass;
    private int    initialSize = 10;
    private int    minPoolSize = 1;
    private int    maxPoolSize = 2;
    private int    maxActive   = 12;

    protected void setUp() throws Exception {
   
        jdbcUrl = "jdbc:h2:file:./demo-db";
        user = "sa";
        password = "sa";
        driverClass = "org.h2.Driver";
    }

    public void test_0() throws Exception {
   
        DruidDataSource dataSource = new DruidDataSource();

        JMXUtils.register("com.alibaba:type=DruidDataSource", dataSource);

        dataSource.setInitialSize(initialSize);
        dataSource.setMaxActive(maxActive);
        dataSource.setMinIdle(minPoolSize);
        dataSource.setMaxIdle(maxPoolSize);
        dataSource.setPoolPreparedStatements(true);
        dataSource.setDriverClassName(driverClass);
        dataSource.setUrl(jdbcUrl);
        dataSource.setPoolPreparedStatements(
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值