druid初始化过程

durid 初始化过程

init方法

  • 判断是否已经初始化过了
  • 初始化DruidDriver 单例模式
  • 获得线程锁,当被打断时,停止尝试获取锁
  • 获取锁成功后,再判断实例是否已经初始化过了
  • 创建数据源id,同时累计加1
  • 判断是不是wrap-jdbc如果是则初始化,同时加载过滤
  • 初始化过滤器filter
  • 设置数据库类型dbtype,对于mysql\mariadb\aliyun_ads三个数据库,判断是否使用(cacheSeverConfiguration)数据库缓存
  • autoFilterLoader加载
  • 识别数据库类型,if 连续判断
  • Mysql和Oracle两大类判断
  • 加载链接心跳检测模块
  • validationQueryCheck()没有看明白
            if (isUseGlobalDataSourceStat()) {
                dataSourceStat = JdbcDataSourceStat.getGlobal();
                if (dataSourceStat == null) {
                    dataSourceStat = new JdbcDataSourceStat("Global", "Global", this.dbType);
                    JdbcDataSourceStat.setGlobal(dataSourceStat);
                }
                if (dataSourceStat.getDbType() == null) {
                    dataSourceStat.setDbType(this.dbType);
                }
            } else {
                dataSourceStat = new JdbcDataSourceStat(this.name, this.jdbcUrl, this.dbType, this.connectProperties);
            }
            dataSourceStat.setResetStatEnable(this.resetStatEnable);

这一段没有看懂

            connections = new DruidConnectionHolder[maxActive];
            evictConnections = new DruidConnectionHolder[maxActive];
            keepAliveConnections = new DruidConnectionHolder[maxActive];

初始化三类不同的链接管理器

   			 for (int i = 0; i < initialSize; ++i) {
                   submitCreateTask(true);
               }

异步初始化链接任务

private void submitCreateTask(boolean initTask) {
        createTaskCount++;//应该是记录了执行的次数
        CreateConnectionTask task = new CreateConnectionTask(initTask); //创建了一个链接任务
        if (createTasks == null) {
            createTasks = new long[8];
        }

        boolean putted = false;
        //把当前任务的taskId加入到createTasks的第一个为零的元素中,记录,没有使用集合框架
        for (int i = 0; i < createTasks.length; ++i) {
            if (createTasks[i] == 0) {
                createTasks[i] = task.taskId;
                putted = true;
                break;
            }
        }
        //如果容量不足的时候,扩充至原来的1.5倍
        if (!putted) {
            long[] array = new long[createTasks.length * 3 / 2];
            System.arraycopy(createTasks, 0, array, 0, createTasks.length);
            array[createTasks.length] = task.taskId;
            createTasks = array;
        }
		//提交任务,还不知道createScheduler的实现类是哪个
        this.createSchedulerFuture = createScheduler.submit(task);
    }
   			createAndLogThread();//日志线程
            createAndStartCreatorThread();//创建链接的线程
            createAndStartDestroyThread();//销毁链接的线程

初始化完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值