Druid源码
源码阅读
Gesmee
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Druid源码阅读10-哪些情况下会丢弃连接?
1.DruidDataSource.shrink(boolean checkTime)方法中异步线程 DestroyTask 对无效的Collection做清除public void shrink(boolean checkTime) { final List<DruidConnectionHolder> evictList = new ArrayList<DruidConnectionHolder>(); try { lock.lockInte原创 2022-05-20 20:02:57 · 614 阅读 · 0 评论 -
Druid源码阅读9-什么时候会创建新连接?
Druid连接的创建时点1. initialSize>0时,将在init()时进行创建,此时创建连接由是否指定asyncInit参数来判断,需要注意的是,此时如果采用异步创建需要设置线程池,否则即使开启asyncInit也依旧会采用同步创建。2. 开启keepAlive并且initialSize<minIdle,将在init()时进行创建,此时将采用异步方式创建连接3. 抛弃连接(discardConnection)且连接池中活跃连接总数<最小数量,此时采用异步方式创建连接4原创 2022-05-19 19:30:08 · 1145 阅读 · 0 评论 -
Druid源码阅读8-连接泄露检测
removeAbandoned()方法属于DruidDataSource类。这个方法用于连接泄露检测,通过removeAbandoned属性配置是否打开连接泄露检测。源码思路如下:1.获取activeConnectionLockactiveConnectionLock.lock();2.判断连接是否在使用中。pooledConnection.isRunning()3.判断连接创建时间如果大于removeAbandonedTimeoutMillis,设置traceEnable为fals原创 2022-05-18 17:54:44 · 525 阅读 · 0 评论 -
Druid源码阅读7-AST节点类型
常用的AST节点主要有三种类型:SQLObject、SQLExpr、SQLStatement;其中最常使用的就是 SQLStatement ,其子类常见的有DruidSelectStatement、DruidInsertStatement、DruidUpdateStatement等。今天就来说说SQLStatement。最常用的Statement当然是SELECT/UPDATE/DELETE/INSERT,它们是class SQLSelectStatement implements SQLSt原创 2022-05-17 16:24:03 · 553 阅读 · 0 评论 -
Druid源码阅读6-SQL解析之AST语法树
Druid的SQL解析器主要有三部分组成,如下:1、Parsera、词法分析b、语法分析2、AST(Abstract Syntax Tree,抽象语法树)3、Visitor在计算机科学中,抽象语法树(AbstractSyntaxTree,AST),或简称语法树(Syntax tree),是源代码语法结构的一种抽象表示,Druid 解析SQL也一样,会遵循一定的规则将SQL分析并构建成语法树AST。Parser主要的作用是生成AST,Parser主要有两部分组成:词法分析、语法分析原创 2022-05-16 12:54:35 · 3383 阅读 · 0 评论 -
Druid源码阅读5-Parser之SQLStatement
本篇文章来探究Druid解析器如何工作。以下面demo为例:public void test_1() throws Exception { String sql = "SELECT /*mark for picman*/ * FROM WP_ALBUM WHERE MEMBER_ID = ? AND ID IN (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?原创 2022-05-14 05:27:42 · 603 阅读 · 0 评论 -
Druid源码阅读4-监控分析
首先在源码测试用例中找到TestRollBack,在conn.rollback()这行打上断点原创 2022-05-13 06:42:30 · 279 阅读 · 0 评论 -
Druid源码阅读3-DruidDataSource之shrink
shrink方法是DestroyTask线程中回收连接的具体执行方法。首先获得锁: try { lock.lockInterruptibly(); } catch (InterruptedException e) { return; } 之后,要判断初始化状态是否完成,如果采用异步初始化,可能DestoryTask线程已经启动,但是连接池还没有初始化完成。原创 2022-05-12 05:17:09 · 468 阅读 · 0 评论 -
Druid源码阅读2-DruidDataSource之getConnectionDirect ()
在 getConnectionDirect 中,druid主要做了下面的事情:1、尝试获取连接,如果超时就判断是否达到尝试次数,在getConnectionInternal()方法中,如果没到且 activeCount+poolingCount < maxActive 则继续尝试,否则抛出超时异常。2、获取到连接后判断如果开启testOnBorrow,就进行连接的校验。看连接是否正常。如果校验连接异常,则丢弃链接,重新尝试获取。3、如果未开启 testOnBorrow,但开启testWhile原创 2022-05-11 05:49:45 · 710 阅读 · 0 评论 -
Druid源码阅读1-DruidDataSource之init()
首先,在test中找到连接池的测试Demo在DruidDataSource 这个类中,DruidConnectionHolder 数组存着所有池中的连接private volatile DruidConnectionHolder[] connections;接下来,看看getConnections()方法跟进init()方法看看初始化了什么,可以看到init 方法主要做了下面这些事情1、根据jdbcUrl判断连接的数据库类型,获取对应的JdbcDriver以及初始化Conne.原创 2022-05-10 06:09:02 · 1499 阅读 · 0 评论
分享