druid
文章平均质量分 61
走在学习路上的小腾
作为一个IT男,我坚信:
1.如果现在开始努力,最坏的结果无非就是大器晚成。
2.道阻且长,行则将至。行而不辍,未来可期。
3.不忘初心,以始为终。
展开
-
Druid源码(八)-怎么设计连接池
通过2周的学习梳理,对Druid的怎么操作数据库有了一个粗浅的了解。同时随着对Druid的学习,我也一直思考一个问题,怎么样设计一个连接池呢?作为一个底层框架需要考虑哪些方面呢?这篇文章是我对这个问题的思考。总体上是从战略设计、战术设计总体2个层面分析。如图所示: 战略设计 Druid的目标是什么 从Druid最早的一个tag(0.2)可以看出这个框架最早就明确要实现一些基本功能:连接池、过滤器、统计、代理、防火墙等。这几个包一直延续到了现在的版本。也就是说Druid的目标是实现一个高性能、高可用原创 2022-05-20 23:42:21 · 428 阅读 · 0 评论 -
Druid源码学习(七)-shirk逻辑
在前面介绍了DruidDataSource类的init方法中有三个线程:createAndLogThread()、createAndStartCreatorThread()、createAndStartDestroyThread() 分别是创建日志、创建连接,销毁线程。这个线程是守护线程。 整体代码如下: public void shrink(boolean checkTime, boolean keepAlive) { try { lock.lockI原创 2022-05-19 23:20:07 · 329 阅读 · 0 评论 -
Druid源码学习(六)-统计stat之获取连接
统计功能算是Druid工具亮点之一了。统计可以帮助研发或者运维获取到数据连接实时的一些指标,从而能够更好的定位问题。 stat统计是从StatFilter开始。其中connection代码如下: public ConnectionProxy connection_connect(FilterChain chain, Properties info) throws SQLException { ConnectionProxy connection = null; ...原创 2022-05-17 23:36:01 · 560 阅读 · 0 评论 -
Druid源码学习(五)-内置Filter的调用
上篇文章介绍了Filter是如何加载的。那么接下来就介绍Filter的关键类。 Filter 这个接口定义了Filter需要具备的功能,分成2部分:生命周期、必要操作。 生命周期方法为了做更好的扩展。 void init(DataSourceProxy dataSource); void destroy(); 其他方法基本上都是与数据库操作有关的方法。这里注意一个细节就是其他接口方法定义的参数中都会包含FilterChain 这个参数。这个对象使用了责任链方式对Filter进行扩原创 2022-05-17 20:57:05 · 873 阅读 · 0 评论 -
Druid源码学习(五)-内置Filter加载
前面介绍完了连接池的大体流程,今天来梳理Druid中Filter的整体流程原创 2022-05-16 23:26:13 · 487 阅读 · 0 评论 -
Druid源码学习(四)-连接总结
通过前面几篇文章把获取数据库连接的逻辑粗略的梳理了一下。在这过程中我产生了以下几个问题: 什么是连接池 在连接池模式下,获取连接应该注意哪些 可用进行哪些扩展 带着以上的问题思考,画了一张思维导图。 作为一个数据库连接池工具,应该把场景放宽。就是说数据库无论是单机、还是负载均衡亦或者是主从的方式都应该支持。所以第一层应该是数据库组成方式的支持。对于Druid这个项目源码,对负载均衡、主从方式的支持还没有分析到。所以这里不做介绍。本文先只介绍单机的情况。在单机的方式下,我把思路分为了3个阶段.原创 2022-05-14 23:46:32 · 544 阅读 · 0 评论 -
Druid源码学习(三)
前面介绍了Druid数据源获取连接的init 方法。那么作为数据连接池是如何获取连接以及释放连接的呢?今天就来学习连接池对连接的管理。 获取连接 获取数据库连接的代码如下所示: @Override public DruidPooledConnection getConnection() throws SQLException { return getConnection(maxWait); } public DruidPooledConnection原创 2022-05-13 23:38:35 · 628 阅读 · 0 评论 -
Druid源码学习(二)-init创建连接
总图 JDBC获取连接 DriverManager.getConnection(url, username, password); //getConnection 方法 private static Connection getConnection( String url, java.util.Properties info, Class<?> caller) throws SQLException { /* * When c.原创 2022-05-12 23:44:33 · 654 阅读 · 0 评论 -
Druid源码学习(二)-init方法的驱动加载
今天继续看DruidDataSource的init 方法。这个方法从字面意思上看是初始化的含义。也就是说在真正获取连接之前数据源还需要做一些工作。这里我会分几篇文章来总结自己的学习,因为init很复杂。 第一篇文章会从头梳理一个问题: Druid连接池如果获取连接 在介绍Druid之前,先回顾一下JDBC如果获取连接的。JDBC获取连接2步骤: //1.加载驱动(开发推荐的方式) Class.forName("com.mysql.jdbc.Driver"); String url = "jdb原创 2022-05-11 23:15:22 · 1043 阅读 · 0 评论 -
Druid源码学习(一)
从有个测试用例看连接的建立:Demo0 public class Demo0 extends TestCase { private String jdbcUrl; private String user; private String password; private String driverClass; private int initialSize = 10; private int minPoolSize = 1; priv原创 2022-05-10 23:10:19 · 672 阅读 · 0 评论