返回
Druid源码分析之DruidDataSource的recycle过程
后端
2023-11-27 09:19:08
技术领域水深似海,虽路途遥遥,攻关者不止,此乃攻坚克难的必备精神。 阅读源码,不仅可提升技术能力,更能锻炼读代码的思维方式,此时若能辅以思维导图进行整理,更是事半功倍!继Druid的基础组件剖析之后,我们将继续深挖其框架实现,本文对DruidDataSource的recycle()方法展开分析。
DruidDataSource.recycle()方法是用来回收Connection的,它的目的是将连接的状态清空/重置之后,放置到连接池的connections数组的尾部,然后发送连接事件通知。该方法的实现如下:
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>