【Druid源码阅读】3. 初始化连接之同步创建连接

alibaba druid 连接池获取数据库连接过程解析 alibaba druid 连接池获取数据库连接过程解析 1.初始化过程 主要看DruidDataSource这个类 看怎么创建连接的要从getConnection()这个方法看起 getConnection()中有个init()初始化方法 init做的事情就是加锁,然后判断各种条件参数是否符合要求,给内部各种参数赋值 需要关心的就是下面的代码 connections = new DruidCon... 阅读详情

书接上文,异步创建连接需要设置参数,如果不设置参数,使用默认配置,会进到同步创建连接的分支。

if (createScheduler != null && asyncInit) {
    // 异步
    for (int i = 0; i < initialSize; ++i) {
        submitCreateTask(true);
    }
} else if (!asyncInit) {
    // 同步
    // init connections
    while (poolingCount < initialSize) {
        try {
            PhysicalConnectionInfo pyConnectInfo = createPhysicalConnection();
            DruidConnectionHolder holder = new DruidConnectionHolder(this, pyConnectInfo);
            connections[poolingCount++] = holder;
        } catch (SQLException ex) {
            LOG.error("init datasource error, url: " + this.getUrl(), ex);
            if (initExceptionThrow) {
                connectError = ex;
                break;
            } else {
                Thread.sleep(3000);
            }
        }
    }
 
    if (poolingCount > 0) {
        poolingPeak = poolingCount;
        poolingPeakTime = System.currentTimeMillis();
    }
}

可以看到,这里调用的跟异步调用的方法是同一个,即 createPhysicalConnection()。

因为同步方式就是单线程顺序执行,while 循环中创建出初始化连接数量的连接,封装到 DruidConnectionHolder 中,并保存到数组中,相比较异步初始化多线程的情况,要简单很多。

// 由此行代码可知 poolingCount 表示连接池数量
connections[poolingCount++] = holder;

【Druid源码阅读】2. 初始化连接之异步创建连接 今天就连着昨天的思路,来看下连接到底是如何初始化的。 第14步: 初始化连接,数量为设置的初始连接数,并存放到数组中;(真正创建连接在这一步中) if (createScheduler != null && asyncInit) { // 异步 for (int i = 0; i < initialSize; ++i) { submitCreateTask(true); } } else if (!asyncInit) { //.. 阅读详情

相关推荐

Druid阅读(二)Druid初始化

目录 1 寻找源码入手点 2 开始Druid初始化分析 1 寻找源码入手点 如何开始Druid源码的阅读,这不免是个头痛的问题? 呃呃呃...昨天我们已经搭建好了一个基于Spring boot的Druid的demo,那么今天不妨直接基于搭建的示例来瞧瞧如何入手? 启动Spring boot示例项目观察到,如下截图的输出日志,图中的红框处 再看自己工程的Druid配置,用spring.datasource做了一系列的配置(druid相关配置有问题,后面会做说明),然后配置了一个 spri

he_cha_bu的博客 1369

DruidDataSource详解部分(一)

资源复用是系统性能优化中的一种常用手段,如单例,数据库连接池,线程池等都是资源复用的常用技巧。 数据库连接池的基本原理是在内部对象池中维护一定数量的数据库连接,并对外暴露数据库连接获取和返回方法 和dbcp类似,druid的配置项如下 欢迎大家使用Druid,常见问题在这里解答,希望对大家有所帮助。 https://github.com/alibaba/druid/wiki/%E5%B8...

liaonanfeng88的优快云博客 5632

Druid源码阅读-filter逻辑浅析

简单看下Druid的Filter实现

潇一居 1947

sql连接池是一个很方便的操作建议使用

SQL最后的连接池 JDBC连接池 2、常见的连接池 A.标准连接池: javax.sql.DataSource 通用的方法 a.getConnection() 获取连接池的操作 b.close() 归还连接池的操作(归还不是释放资源) B.其他框架的连接池 a. C3P0 数据库连接池 b....

Walker 1286

Druid - 项目配置以及数据源初始化

Druid 学习 一. 项目配置 1.1 拉取项目代码 git clone git@github.com:alibaba/druid.git 1.2 本地编译执行 这里因为在 pom 依赖中Druid 配置了 jdk 路径env.JAVA_HOME,对于没有初始化本地环境变量的同学这里可能会报错,可以通过配置 jdk 路径来解决 : <properties> <env.JAVA_HOME>/***/JDk/Home</env.JAVA_HOME> </

你不在^-^的博客 1329

springboot+mysql+oracle+druid 双数据库进行数据同步

主要是数据同步从oracle同步到mysql,数据量为好几十万,采用了流处理的方式同步进行处理,防止出现oom

连接mysql数据库的配置备忘

driverClassName:com.mysql.jdbc.Driver username:root password:123456 #filter:stat 监控统计使用   filter:log4j 日志使用    filter:wall防御sql注入      filters:stat      #最大连接池数量    maxActive:10 #初始化时建立物理连接时的数量

qq_28101869的博客 413

hi3519dv500 os04a10输入调试

因该sensor接在soc端的iic6,在驱动中(Hi3519DV500_SDK_V2.0.1.1\smp\a55_linux\source\mpp\cbb\isp\user\sensor\hi3519dv500\omnivision_os04a10\os04a10_sensor_ctl.c)注意总线的选择。mem_process_isolation=1 改为 mem_process_isolation=0。2、OT_MIPI_SET_HS_MODE配置为LANE_DIVIDE_MODE_1。

linus 3162

druid解析-连接池初始化

本文主要介绍连接池初始化的过程。

龚厂长的博客 2572

Kali Linux实战:用Impacket的secretsdump.py快速提取Windows域控哈希(附避坑指南)

本文详细介绍了如何在Kali Linux中使用Impacket的secretsdump.py脚本快速提取Windows域控哈希,包括环境准备、原理剖析、实战操作及常见问题解决方案。特别适合CTF竞赛和网络信息安全爱好者学习,提升渗透测试效率。

weixin_33670786的博客 409

从2804云台电机到桌面机械臂:一个STM32/GD32玩家的FOC驱动踩坑全记录

本文详细记录了从2804云台电机到桌面机械臂的FOC驱动开发历程,涵盖了硬件选型、驱动方案优化、软件调试等关键环节。特别分享了L6234P驱动芯片的发热问题、AS5600编码器的I2C通信陷阱以及PID调参的实战经验,为DIY爱好者提供了宝贵的参考。

weixin_26897585的博客 474

java 静态源码阅读之 druid 连接池

java 静态源码阅读之 druid 连接池 为什么会有连接池 作为一个后端开发,我们日常中要去请求各种各样的外部资源。例如去做数据库请求查询数据,去做http请求调用其他接口。所有这些,都是需要本地应用与其他服务器建立连接,才能获取资源的。 在没有连接池的情况下,我们怎么去连接呢?那当然只能是每请求一次,就去建立一次连接。可是在计算机的世界中,频繁建立连接是非常损耗资源的。所以当连接不用的时候,我们希望可以保持这个连接的状态,其他线程要用的时候,就把它取出来用。然后有了连接池的存在。接下来我们以阿里的Dr

sinat_37255539的博客 574

知识图谱-KGE-语义匹配-双线性模型-2018:SimplE

【paper】 SimplE Embedding for Link Prediction in Knowledge Graphs 【简介】 本文是加拿大英属哥伦比亚大学的两位学者发表在 NIPS 2018 上的工作,文章提出了 SimplE(Simple Embedding)。这篇和前面一篇差不多,也是对 1927 年的 CP 进行改进(简化),传统CP为实体分配的两个向量是独立训练的,SimplE利用关系的逆在三元组打分函数中加上了一个对称项,使得每个实体的两个向量依赖学习,并且 SimplE 的复杂度随

u013250861的博客 957

Druid阅读(九)XA连接初始化

1 初始化DruidXADataSource 初始化DruidXADataSource由应用开发人员配置如下完成: /** * jdbc.ds1获取配置信息,初始化druidDataSource1 * @return */ @Bean(name="druidDataSource1") @ConfigurationProperties(prefix = "jdbc.ds1") public DruidXADataSource dataSource0(

he_cha_bu的博客 1787

蓝牙芯片驱动开发-第11章第1题-WiFi蓝牙共存的关键策略有哪些

蓝牙芯片驱动开发-第11章第1题-WiFi蓝牙共存的关键策略有哪些

weixin_42162924的博客 30

2025_NIPS_Truthful Aggregation of LLMs with an Application to Online Advertising

大型语言模型(LLMs)生成内容的 revenue 变现是在线广告的下一个前沿领域。我们考虑这样一种场景:广告商旨在影响LLM的回复,而平台则寻求最大化广告商价值并确保用户满意度。核心挑战在于,广告商的偏好通常与用户偏好存在冲突,且广告商可能误报其偏好。为解决这一问题,我们提出MOSAIC——一种拍卖机制,它确保真实申报是广告商的占优策略,并使每个广告商的效用与其对社会福利的贡献保持一致。重要的是,该机制无需LLM微调或访问模型权重,且随着计算资源的增加,可证明收敛到最优微调LLM的输出。

c_cpp_csharp的专栏 79

2022-05-17 Druid源码阅读——Druid在什么时候会创建连接(二)

CreateConnectionTask#runInternal CreateConnectionTask是用于Druid中用于创建连接的任务,实现了Runnable接口,主要用于向线程池中提交任务。 public class CreateConnectionTask implements Runnable { private int errorCount = 0; private boolean initTask = false; private final long t..

风灵玄的博客 757

仿真学习系列(四十一):Sigrity仿真之PDN阻抗提取

电源分配网络(Power Distribution Network,简称PDN)是电子系统中至关重要的部分,主要用于将电源从电源输入端传输到各个组件。PDN的设计质量直接影响到系统的电源完整性和信号稳定性,尤其是在高速设计中,PDN的阻抗特性对电源噪声、地弹(ground bounce)和电源完整性(Power Integrity,简称PI)具有重要影响。

案例文章,高速信号 1133

【Druid源码阅读】1. 初识Druid

Druid源码阅读

hellboy0621的博客 1541

【智能车Code review】——环岛的判定与补线操作

【1】效果展示图 状态1、状态2 状态3 状态4、状态5 状态6 状态7 状态8 【2】状态机设定需要的参数 以右环岛为例: k_left:左线的斜率 rou_of_left:左线的方差 last_rou_of_left:上一帧的左线方差 l_start:左线第一行为黑的所在行 right_turn_down; right_turn_middle; right_turn_up; 左线的下、中、上拐点 fiv_width[i]:第i行的赛道宽度 leftline_du

hanhan的博客 2万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Druid源码阅读一

DruidSource

qq_33592535的博客 1392

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Druid源码阅读9-什么时候会创建新连接?

Druid连接的创建时点 1. initialSize>0时,将在init()时进行创建,此时创建连接由是否指定asyncInit参数来判断,需要注意的是,此时如果采用异步创建需要设置线程池,否则即使开启asyncInit也依旧会采用同步创建。 2. 开启keepAlive并且initialSize<minIdle,将在init()时进行创建,此时将采用异步方式创建连接 3. 抛弃连接(discardConnection)且连接池中活跃连接总数<最小数量,此时采用异步方式创建连接 4

suxiao_21的博客 1184

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Alibaba Druid 源码阅读(四) 数据库连接池中连接获取探索

上文中分析了数据库连接池的初始化部分,接下来我们来看看获取连接部分的代码

github_35735591的博客 1459

【Druid源码阅读】6. 初始化后获取连接

前几天把 init 初始化方法大概分析了下,今天继续,把获取连接的部分分析完。 public DruidPooledConnection getConnection(long maxWaitMillis) throws SQLException { init(); if (filters.size() > 0) { FilterChainImpl filterChain = new FilterChainImpl(this); return fil

hellboy0621的博客 370

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

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

github_35735591的博客 718

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

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

github_35735591的博客 530
上一篇: 【Druid源码阅读】2. 初始化连接之异步创建连接
下一篇: 【Druid源码阅读】4. 创建并运行创建连接线程:createAndStartCreatorThread()
hellboy0621
博客等级 码龄9年 61粉丝 147原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值