马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
在利用Spring Boot联合Druid连接池时,开发者可能会遇到"discard long time none received connection"的警告信息。虽然这通常不会影相应用步伐的正常运行,但这些警告信息可能会让人感到困扰。本文将探讨这个问题的原因,并提供几种解决方法。
问题现象
在利用Druid连接池的新版本(如1.2.5)时,控制台可能会时不时打印以下警告:
- WARN com.alibaba.druid.pool.DruidAbstractDataSource - discard long time none received connection. , jdbcUrl : [your-jdbc-url]
复制代码 这表明Druid连接池检测到某些数据库连接已经高出了肯定时间没有活动,因此被标记为长时间空闲并被丢弃。
产生原因
经过检察Druid的源码,发现这个问题的根源在于Druid连接池对MySQL连接的处置惩罚逻辑。在DruidAbstractDataSource类的testConnectionInternal方法中,如果连接空闲时间高出60秒,Druid会认为该连接已经不再有效,并将其丢弃。
- if (valid && isMySql) {
- long lastPacketReceivedTimeMs = MySqlUtils.getLastPacketReceivedTimeMs(conn);
- if (lastPacketReceivedTimeMs > 0 &&
- mysqlIdleMillis >= timeBetweenEvictionRunsMillis) {
- discardConnection(holder);
- LOG.warn("discard long time none received connection. " +
- ", jdbcUrl : " + jdbcUrl + ", version : " + VERSION.getVersionNumber() +
- ", lastPacketReceivedIdleMillis : " + mysqlIdleMillis);
- return false;
- }
- }
复制代码 解决办法
1. 修改Druid配置
一种解决方法是修改Druid的配置,通过设置druid.mysql.usePingMethod=false来制止利用MySQL的Ping方法来查抄连接有效性。这可以通过以下两种方式实现:
- 运行时配置:在运行参数中增加-Ddruid.mysql.usePingMethod=false。
- Spring配置:在Spring的配置文件中添加:
spring:
datasource:
druid:
mysql:
usePingMethod: false
2. 调整数据库配置
另一种方法是调整数据库的配置,例如MySQL的wait_timeout参数,以增加数据库端的空闲超时时间,从而减少因为数据库端关闭连接而导致Druid报错的环境。
3. 代码层面的优化
最后,确保应用步伐在利用数据库连接时,能够实时释放资源,制止不必要的连接泄漏。
结语
虽然"discard long time none received connection"的警告可能不会直接影相应用步伐的运行,但解决这个问题可以进步应用步伐的稳定性,并减少不必要的资源浪费。希望本文提供的方法能够资助你解决这个问题。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |