druid回收连接导致statement is closed

相关知识:druid强制回收机制

代码分析:为什么连接回收会抛出这个异常

首先查看DruidPooledConnection 这个类的close 方法
druid回收连接导致statement is closed_第1张图片
syncClose 最终也会调用 recycle() 
druid回收连接导致statement is closed_第2张图片
 所以我们主要看
druid回收连接导致statement is closed_第3张图片
实现类 DruidDataSource 
druid回收连接导致statement is closed_第4张图片

druid回收连接导致statement is closed_第5张图片
可以看到,相关的statement都会被关闭而Druid 使用的DruidPooledPreparedStatement 的 colse  如下
druid回收连接导致statement is closed_第6张图片
DruidPooledConnection 的实现类如下:
druid回收连接导致statement is closed_第7张图片
stmt.closeInternal() 最终调用了这个函数,并设置了 closed 
druid回收连接导致statement is closed_第8张图片
而 closed 就是抛出 SQLException: statement is closed 的最大元凶
druid回收连接导致statement is closed_第9张图片

你可能感兴趣的:(druid)