druid 源码分析与学习(二)

开篇介绍一下数据库中的常用概念- 数据源

数据源可以为应用程序屏蔽特定的数据库驱动(Driver),并将数据库连接进行池化,以提升数据库操作的性能和可伸缩性。将数据库连接进行统一管理的同时,还可以对数据库连接进行监控,比如Druid数据源

从数据源的概念我们大致可以理解数据源是一种原始的通过DriverManager获取连接替代方案的最佳实践之一。DataSource作为应用程序与数据库中间的一层缓冲带,为我们开发者提供了足够的发挥空间。我们可以将池化技术应用于dataSource(实际上也的确如此)为我们提供高性能的数据连接,对connection,Statement,ResultSet做一些代理封装我们就可以对SQL做运行时监控,比如Druid。

分层,代理的思想在我们软件开发中随处可见,我们平时开发中要学会运用。(本质上就是要解耦,屏蔽第三方的不确定性)

言归正传,上一篇文章从druid大方向上分析了druid的实现思路,后续章节主要从细节分析源码实现。分析源码除了要知道框架的主要设计思想以外,我们还必须明确:哪个类是入口?那个类的方法是入口?核心组件有哪些?每个组件的生命周期?组件之间的联系?

Druid算是一个相对轻量级的框架了,我们如何知道Druid的入口呢?

方法一:对于项目中使用过数据源的同学,一定在代码中做过类似的代码:

DataSource dataSource = new DataSource(); dataSource.setUrl()。。。。等各种参数设置。

Connection con= dataSource.getCon();

......

很显然,不同的数据源框架都是对DataSource的一种实现。那我们就去Druid源码搜一下那些类实现了DataSource。经过搜索,我们找到了DruidDataSource的一个具体实现。ok,入口类找见了,一看这个类的成员变量一大堆,方法一大堆,额,晕。找不到要害呀。其实druid完全可以借鉴一下tomcat的LifeCycle接口,这样就可以对所有实现该接口的组件的生命周期进行统一管理了。不过也许druid开发团队认为框架太小了,没必要引入,让程序复杂化。(不过我还是觉得引入好点,哈哈)。那我们就只能通过druid的官方文档来得知具体入口了,

上面为一段官方提供的配置数据源的代码,从 配置中(init-method="init")可以看出初始化方法为init,销毁的方法为close

后续我们就从init方法开始说起。

方法二:

随着springboot的普及,好的框架要想快速普及,做个starter势在必行呀。对于业界口碑还不错的druid框架,starter肯定是有的,下图是starter的源码截图:

从该方法可以看出,springboot将DataSource注入了容器,并调用init方法初始化了组件。

通过以上俩种方式,我们就找到了程序入口,接下来我们就可以深入虎穴直视虎子了!

下篇继续。。。

想要持续关注,请关注呦

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180530G1RYS700?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券