首页 > 其他分享 >DriverManager.getConnection的底层如何实现(非机器级别)

DriverManager.getConnection的底层如何实现(非机器级别)

时间:2024-08-06 15:53:39浏览次数:8  
标签:info DriverManager url getConnection Driver hostSpecs props hostSpec 底层

前言

DriverManager.getConnection的目标是获得一个Connection,而Connection的关键部分在于QueryExecutor

顺序

DriverManager的getConnection的实现方法,实际上是对其存储的每个"Driver"(实际并非直接存储Driver类型引用)尝试执行Driver.connect(url,info);
Driver.connect(url,info)方法,则是先将本地的配置信息、url中携带的配置信息组合到info(props)中,继而执行Driver.makeConnection(url,props)获得对应的Connection实现类型;
对于PG,Driver.makeConnection(url,props)调用PgConnection的构造方法:PgConnection(hostSpecs(props), props, url)。hostSpecs(props)从props(Properties对象)中解析出PostgreSQL数据库的主机名、端口号以及本地套接字地址,并构建一一对应的数组。
而PgConnection(hostSpecs(props), props, url)的关键在于this.queryExecutor = ConnectionFactory.openConnection(hostSpecs, info),获得一个queryExecutor实例;
而ConnectionFactory.openConnectionImp(hostSpecs, info)的关键步骤在于:

  • 根据info建立一个SocketFactory;
  • 建立hostSpec--targetServerType对应关系数组,对每个数组进行遍历:
    • 执行ConnectionFactory.tryConnect(info, socketFactory, hostSpec, sslMode, gssEncMode)获得一个new PgStream;
      • ConnectionFactory.tryConnect(info, socketFactory, hostSpec, sslMode, gssEncMode)关键在于构建一个PGStream:PGStream(socketFactory, hostSpec, connectTimeout, maxSendBufferSize);
        • PGStream(socketFactory, hostSpec, connectTimeout, maxSendBufferSize)关键在于新建一个socket,并建立该socket的输入输出流和缓冲区
    • 使用QueryExecutorImpl(newStream, cancelSignalTimeout, info)构建所求的QueryExecutor;

标签:info,DriverManager,url,getConnection,Driver,hostSpecs,props,hostSpec,底层
From: https://www.cnblogs.com/bbban/p/18345284

相关文章

  • 支撑英雄联盟750万同时在线用户的聊天系统底层的CRDT是什么?
    CRDT是什么意思?CRDT是Conflict-FreeReplicatedDataTypes的缩写,直译的话即“无冲突可复制数据类型”。翻译过来还是一脸懵逼!用稍微通俗一点的话说:研究分布式系统,尤其是研究最终一致性分布式系统的过程中,一个最基本的问题就是,应该采用什么样的数据结构来保证最终一致性?CR......
  • 属性填充底层源码深入剖析前戏
    属性填充底层源码深入剖析前戏方式一:使用set方式注入创建两个类:packagecom.coding.spring.practies;publicclassTestDIBean{ publicStringsay(){ return"IamTestDIBean.say()"; }}packagecom.coding.spring.practies;publicclassTestDIBean2{ priva......
  • Java SE 文件上传和文件下载的底层原理
    1.JavaSE文件上传和文件下载的底层原理@目录1.JavaSE文件上传和文件下载的底层原理2.文件上传2.1文件上传应用实例2.2文件上传注意事项和细节3.文件下载3.1文件下载应用实例3.2文件下载注意事项和细节4.总结:5.最后:2.文件上传文件的上传和下载,是常见的功能。......
  • 有参构造函数注入底层源码深入剖析**前戏
    有参构造函数注入底层源码深入剖析前戏方式一:创建两个类:publicclassTestDIBean{ publicStringsay(){ return"IamTestDIBean.say()"; }}packagecom.coding.spring.practies;publicclassTestDIBean1{ privateTestDIBeantestDIBean; publicTestDIBean......
  • 读书笔记-《从码农到工匠》+ 《程序员的底层思维》
    思想很重要。在晚上睡不着的时候就刷到了这本《程序员的底层思维》看了下目录。就下单了。作者是阿里巴巴的大佬。已经实现财富自由了吧。要学习的思维有哪些呢。第一就是抽象了。抽离+具象。抽象越高。挣的越多。哈哈。金字塔、分类、层次、分治、简单、成长(这个思维对人生......
  • java集合之Map篇——HashMap(底层源码非常详细说明)
    前言前面先做了红黑树的讲解平衡二叉树和红黑树-CSDN博客,就是为了为了Map集合做铺垫,Map的几个实现集合底层都用到了红黑树。由于HashMap的东西有点多,HashTable和TreeMap下篇再说明。一、HashMaphashMap底层是哈希表+哈希桶(数组或红黑树) Set篇的几张图会漂亮一点1.......
  • 集合框架最详解(包括底层原理)
    集合框架(非常重要)集合体系结构Collection补充://把集合转换为指定类型的数组,可以使用下面的代码String[]array1=c.toArray(newString[c.size()]);System.out.println(Arrays.toString(array1));//[java1,java2,java2,java3]//把一个集合中的元素,添加到另一......
  • ArrayList底层原理
    1.ArrayList的基本结构  ArrayList内部使用一个Object类型的数组elementData来存储所有的元素。数组的长度可以动态调整。2.初始容量和扩容机制初始容量:当使用无参构造创建一个 ArrayList 实例时会在底层创建一个默认长度为0的数组,可以通过添加参数指定一个初始......
  • MySQL8新特性底层原理
    降序索引什么是降序索引MySQL8.0开始真正支持降序索引(descendingindex)。只有InnoDB存储引擎支持降序索引,只支持BTREE降序索引。另外MySQL8.0不再对GROUPBY操作进行隐式排序。在MySQL中创建一个t2表 createtablet2(c1int,c2int,indexidx1(c1asc,c2desc)); ......
  • redis原理之底层数据结构-跳表
    1.什么是跳表1.1链表及其不足链表是在程序设计中最常见的数据结构之一,它通过指针将多个链表节点连接起来,这样就可以将逻辑上同一类的数据存储到不连续的内存空间上。链表结构如下:但是链表有一个问题,就是当链表需要查询一个元素的时候,需要从链表头部开始遍历,时间复杂度为o(......