Druid出现DruidDataSource - recyle error - recyle error java.lang.InterruptedException: null异常排查与解决

线上的代码之前运行的都很平稳,突然就出现了一个很奇怪的问题,看错误信息是第三方框架Druid报出来了,连接池回收连接时出现的问题。

#### 20231211 10:39:21,592 | INFO | Epoint.PingBiao.Core.CmFunction |  登录系统 
#### 20231211 10:39:22,436 | INFO | Epoint.PingBiao.Core.CmFunction |  加载项目管理页面 
#### 20231211 10:39:22,964 | INFO | Epoint.PingBiao.Core.CmFunction |  fffffffff 
#### 20231211 10:39:23,738 | ERROR | com.alibaba.druid.pool.DruidDataSource |  recyle error 
java.lang.InterruptedException
	at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireInterruptibly(AbstractQueuedSynchronizer.java:1220)
	at java.util.concurrent.locks.ReentrantLock.lockInterruptibly(ReentrantLock.java:335)
	at com.alibaba.druid.pool.DruidDataSource.recycle(DruidDataSource.java:1281)
	at com.alibaba.druid.pool.DruidPooledConnection.recycle(DruidPooledConnection.java:293)
	at com.alibaba.druid.filter.FilterChainImpl.dataSource_recycle(FilterChainImpl.java:4541)
	at com.alibaba.druid.filter.logging.LogFilter.dataSource_releaseConnection(LogFilter.java:817)
	at com.alibaba.druid.filter.FilterChainImpl.dataSource_recycle(FilterChainImpl.java:4537)
	at com.alibaba.druid.pool.DruidPooledConnection.syncClose(DruidPooledConnection.java:270)
	at com.alibaba.druid.pool.DruidPooledConnection.close(DruidPooledConnection.java:228)
	at com.epoint.database.jdbc.connection.DatasourceConnectionProvider.closeConnection(mh:203)
	at com.epoint.database.jdbc.impl.DBImpl.close(ld:182)
	at com.epoint.database.peisistence.PersistenceService.closeDataSource(db:139)
	at com.epoint.core.dao.CommonDao.close(pj:529)
	at sun.reflect.GeneratedMethodAccessor263.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:497)
	at com.epoint.check.util.CheckReflectUtil.invokeMethodWithObjHasParame(CheckReflectUtil.java:456)
	at com.epoint.check.util.CheckReflectUtil.invokeMethodWithObjHasParame(CheckReflectUtil.java:316)
	at com.epoint.check.util.CheckReflectUtil.invokeMethodWithObjHasParame(CheckReflectUtil.java:285)
	at com.epoint.check.util.CheckReflectUtil.invokeMethodWithObj(CheckReflectUtil.java:270)
	at com.epoint.check.util.CheckSqlUtil.find(CheckSqlUtil.java:396)
	at com.epoint.ztb.check.upload.service.KeyIndexService.findIndexes(KeyIndexService.java:130)
	at com.epoint.ztb.check.upload.service.KeyIndexService.getKeyIndexInfo(KeyIndexService.java:67)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:497)
	at com.epoint.ztb.check.timertask.ZtbCheckJsonTask.call(ZtbCheckJsonTask.java:33)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
	at java.lang.Thread.run(Thread.java:745)

看了一下也没有发现所以然,然后去GitHub上的Druid官方开源处,看了一下历史问题修复,发现这个是旧版本已知的一个Bug。

请不要吞没和忽略 java.lang.InterruptedException · Issue #785 · alibaba/druid · GitHub看了一下当前使用的Druid的版本【1.0.11】,然后又确认了一下官方最新的版本是【1.1.9】,已经差了很多个版本了。果断将版本更新至最新

更新到最新版本后,上述问题得到解决。

数据库连接被中断的原因有很多,有一种是初始化配置时设置的数据库连接回收时长,通过datasource.getConnontion() 取得的连接必须在removeAbandonedTimeout这么多秒内调用close(),否则就主动将其杀死,就是conn不能超过指定的租期。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值