返回

Druid源码分析之DruidDataSource的recycle过程

后端

技术领域水深似海,虽路途遥遥,攻关者不止,此乃攻坚克难的必备精神。 阅读源码,不仅可提升技术能力,更能锻炼读代码的思维方式,此时若能辅以思维导图进行整理,更是事半功倍!继Druid的基础组件剖析之后,我们将继续深挖其框架实现,本文对DruidDataSource的recycle()方法展开分析。
DruidDataSource.recycle()方法是用来回收Connection的,它的目的是将连接的状态清空/重置之后,放置到连接池的connections数组的尾部,然后发送连接事件通知。该方法的实现如下:
```java
public void recycle(Connection connection, boolean endOfLife) {
  try {
    connection.recycle();
  }
  finally {
    if (!endOfLife) {
      connectionsLock.writeLock().lock();
      try {
        connections.add(connection);
      }
      finally {
        connectionsLock.writeLock().unlock();
        listener.connectionRecycled(connection);
      }
    }
  }
}
```
<br>

在recycle()方法中,首先会调用Connection的recycle()方法,以便重置连接的状态。然后,如果endOfLife为false,则表示连接不是因为生命周期结束而被回收的,此时会将连接添加到连接池的connections数组的尾部,并发送连接事件通知。
<br>
连接事件通知是由DataSourceListener接口中的connectionRecycled()方法发送的,DataSourceListener接口定义了连接池的监听器,可以监听连接池的各种事件,如连接创建、回收、关闭等。
<br>
通过阅读DruidDataSource的recycle()方法,我们可以了解到Druid是如何回收连接的,以及连接回收后是如何处理的。这些知识对于我们理解Druid连接池的实现原理是非常有帮助的。
<br>
希望这篇文章对您有所帮助,如果您有任何问题或建议,请随时告诉我。

<br>