Alibaba Druid 源码阅读(三) 数据库连接池初始化探索

本文深入探讨了Alibaba Druid连接池的初始化过程,包括双检查锁机制、异步或同步创建初始连接以及在keepalive为true时如何异步建立最小空闲连接。文章通过源码分析,揭示了初始化过程的关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Alibaba Druid 源码阅读(三) 数据库连接池初始化探索


简介

上文中探索了Alibaba Druid的连接池初始化和获取连接的关键代码,接下来详细看看初始化部分

数据库连接池初始化

对整个代码加上注释,如下:

public void init() throws SQLException {
   
   
        // 已经初始化过了,直接返回
        if (inited) {
   
   
            return;
        }

        // bug fixed for dead lock, for issue #2980
        DruidDriver.getInstance();

        // 初始化时上锁
        final ReentrantLock lock = this.lock;
        try {
   
   
            lock.lockInterruptibly();
        } catch (InterruptedException e) {
   
   
            throw new SQLException("interrupt", e);
        }

        boolean init = false;
        try {
   
   
            if (inited) {
   
   
                return;
            }

            initStackTrace = Utils.toString(Thread.currentThread().getStackTrace());

            // 这部分尚不清楚作用
            this.id = DruidDriver.createDataSourceId();
            if (this.id > 1) {
   
   
                long delta = (this.id - 1) * 100000;
                this.connectionIdSeedUpdater.addAndGet(this, delta);
                this.statementIdSeedUpdater.addAndGet(this, delta);
                this.resultSetIdSeedUpdater.addAndGet(this, delta);
                this.transactionIdSeedUpdater.addAndGet(this, delta);
            }

            // 数据库连接url
            if (this.jdbcUrl != null) {
   
   
                this.jdbcUrl = this.jdbcUrl.trim();
                initFromWrapDriverUrl();
            }

            // filter相关,目前为空
            for (Filter filter : filters) {
   
   
                filter.init(this
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值