错误信息

2017-11-15 14:53:16.931 [ ] ERROR com.hzcf.flagship.web.AssetPlanController 126 :

### Error updating database. Cause: java.sql.SQLException: connection holder is null

### Cause: java.sql.SQLException: connection holder is null

; uncategorized SQLException for SQL []; SQL state [null]; error code [0]; connection holder is null; nested exception is java.sql.SQLException: connection holder is null

原因

一般都是因为程序从线程池中获取数据库连接后,长时间占用未及时close导致。

druid链接池有removeAbandoned功能,意思是一个数据库连接池被get后,需要在一定的时间(即removeAbandonedTimeout秒)归还给连接池,否则,就会被druid关掉:

JdbcUtils.close(pooledConnection);

removeAbandonedTimeout配置:

通过datasource.getConnontion() 取得的连接必须在removeAbandonedTimeout这么多秒内调用close(),要不就会被连接池自动关闭链接。(就是conn不能超过指定的租期)

结合removeAbandonedTimeout进行错误分析

在工程中使用了druid连接池,运行一段时间后系统出现异常:

Caused by: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 60009, active 50

at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:80)

at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:280)

... 64 more

Caused by: com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 60000, active 50

at com.alibaba.druid.pool.DruidDataSource.getConnectionInternal(DruidDataSource.java:1071)

at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:898)

at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:4544)

mysql数据库最大连接数设置为500,使用客户端能正常连接。连接数被未被占满。

分析原因应该是程序中有地方连接未关闭造成的。那如何来定呢?使用druid连接池的超时回收机制,在配置中增加以下内容:

运行程序,当连接超过3分钟(即:removeAbandonedTimeout秒)后会强制进行回收,并输出异常日志。

2014-10-13 16:02:28,919 ERROR [com.alibaba.druid.pool.DruidDataSource] -

at java.lang.Thread.getStackTrace(Thread.java:1567)

at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:995)

at cn.org.xxx.xxx.xxx.PaginationInterceptor.intercept(PaginationInterceptor.java:96)

at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:60)

at com.sun.proxy.$Proxy59.query(Unknown Source)

at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:108)

很清楚地看到是在哪里打开的连接未关闭一直在占有,然后再结合源码,把根本问题找到并改正。

总结

连接池为了防止程序从池里取得连接后忘记归还的情况, 而提供了一些参数来设置一个租期, 使用这个可以在一定程度上防止连接泄漏

但是如果你的业务真要跑这么久~~~~那还是注意下这个设置.

此配置项会影响性能,最好只在排查的时候打开。系统运行时最好关闭。

参考

java holder_java.sql.SQLException: connection holder is null相关推荐

  1. Druid java.sql.SQLException: connection holder is null

    问题 java.sql.SQLException: connection holder is null 项目使用了Druid,执行过程中出现了这个错误. 解决过程 错误的意思是没有获取到连接,怀疑是同 ...

  2. 线上问题:java.sql.SQLException: connection holder is null

    1 场景复现 定时更新MySQL数据到缓存中:Map存储. A表和B表均在一个定时任务中查询数据,A表先查,B表后查, B表查询时,出现java.sql.SQLException: connectio ...

  3. java.sql.SQLException: connection holder is null

    解决方案一: <!-- 是否自动回收超时连接 --> <property name="removeAbandoned" value="true" ...

  4. 开发中遇到的Cause: java.sql.SQLException: connection holder is null的异常

    异常的出现是属于获取连接超时,从而找不到持有者. 项目中的配置体现: <property name="removeAbandoned" value="true&qu ...

  5. Caused by: java.sql.SQLException: connection holder is null

    今天在改同事代码的时候,发现这个错误,仔细看代码发现他调对方接口取数据的时候,一次性把5万多条数据查了出来放到一个list,然后又一次型去处理这些数据,而中间的业务代码处理时间又恨长且比较慢,导致的数 ...

  6. java数据库连接Druidsql失败_Druid数据库连接池异常connection holder is null

    Druid数据库连接池异常connection holder is null 具体如下:### Error updating database.  Cause: java.sql.SQLExcepti ...

  7. 关于报错connection holder is null

    关于报错connection holder is null 在练习使用jsp过程中 package com.cjh.dao.impl;import com.cjh.pojo.User; import ...

  8. 已解决:connection holder is null问题。

    错误信息 Caused by: java.sql.SQLException: connection holder is null at com.alibaba.druid.pool.DruidPool ...

  9. 解决mysql中数据库连接connection holder is null的问题

    一.问题 频繁查询或者更新数据库时,出现以下问题报错: Cause: java.sql.SQLException: connection holder is null 二.解决方法 在applicat ...

最新文章

  1. 智能音箱AEC中的回采信号
  2. C语言堆排序Heap Sort算法(附完整源码)
  3. php大并发 大流量 大存储解决方案
  4. Arduino ESP8266编程深入要点
  5. YouTube怎么判断影片内含侵权内容? 解析Content ID内容识别系统的原理及功能
  6. 【BlackHat】研究员吐槽苹果漏洞奖励计划
  7. ptpd 源码解析_IEEE 1588 ptp 代码实现
  8. 海康威视摄像头rtsp推流至H5总结
  9. 【解决】updateAppMessageShareData:fail, the permission value is offline verifying
  10. matlab plotyy 标注,Matlab关于plotyy 标注 legend 的问题
  11. 教你找回直接打开outlook附件文件编辑后保存但未另存为的附件文件?
  12. 微信订阅号简单开发指引
  13. insert into select 语法使用
  14. Android实现截屏方式
  15. 算法高级(20)-集群容错算法
  16. 怎么才能让小孩主动帮忙做家务?
  17. 微型计算机中ram中文名字是,微型计算机中,RAM的中文名字是().
  18. php购买东西价格代码,利用ajax+php实现商品价格计算
  19. 编译型语言和解释型语言的区别
  20. 人脸识别:FaceNet论文详解

热门文章

  1. fork vfork exit _exit (转)
  2. 关于GPS 车辆定位导航中的投影变换
  3. linux的基础知识——正则表达式
  4. linux的基础知识——协议和网络应用程序设计模式
  5. 【计算机网络复习 数据链路层】3.6.2 以太网
  6. AdaBoost 算法 入门
  7. matlab fgoalattain,matlab优化工具箱 | 学步园
  8. 车牌号随机函数 php,模拟生成车牌号的程序.程序运行.生成十个随机的车牌子.......
  9. matplotlib画图设置线条透明度
  10. python from __future__ import division