admin管理员组

文章数量:1618731

业务场景:MySQL千万级大表数据查询,连接出现失效问题,异常如下:

The last packet successfully received from the server was 12,327 milliseconds ago. The last packet sent successfully to the server was 12,454 milliseconds ago.

问题应该是由mysql(wait_timeout)关闭连接而druid未能跟踪导致连接失效。网上翻阅了各种资料,如调整timeBetweenEvictionRunsMillis、minEvictableIdleTimeMillis、maxEvictableIdleTimeMillis等的时间,都不能解决问题(有关这几个参数配置的作用,请自行查阅)。

解决方案:connectionProperties 加上配置项connectTimeout=10000;socketTimeout=30000;

另附上druid配置与mysql环境配置

spring.datasource.druid.driver-class-name=com.mysql.cj.jdbc.Driver

spring.datasource.druid.type=com.alibaba.druid.pool.DruidDataSource

spring.datasource.druid.initialSize=1

spring.datasource.druid.minIdle=3

spring.datasource.druid.maxActive=100

spring.datasource.druid.maxWait=3000

spring.datasource.druid.keepAlive=true

spring.datasource.druid.timeBetweenEvictionRunsMillis=60000

spring.datasource.druid.minEvictableIdleTimeMillis=300000

spring.datasource.druid.maxEvictableIdleTimeMillis=600000

spring.datasource.druid.validationQuery=SELECT 1

spring.datasource.druid.testWhileIdle=true

spring.datasource.druid.testOnBorrow=false

spring.datasource.druid.testOnReturn=false

spring.datasource.druid.poolPreparedStatements=false

spring.datasource.druid.filters=stat,wall,slf4j

spring.datasource.druid.connectionProperties=druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000;connectTimeout=10000;socketTimeout=30000;

以上内容若有不对的,或者有更好解决方案的,请指教。

本文标签: 解决方案CommunicationsdruidfailureLINK