首页 > 解决方案 > 如何解决异常:丢弃连接

问题描述

当我用druid做我的数据库连接池,连接MySQL时,总是出现连接异常:discard connection。

我使用:jdk8 maven3.6 MySQL56 mysql-connect-java 5.1.49 druid1.1.22

Linux

有我的日志:

[ERROR] 2020-07-07 08:59:11,492 
discard connection
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Communications link failure during commit(). Transaction resolution unknown.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:403)
    at com.mysql.jdbc.Util.getInstance(Util.java:386)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:919)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:898)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:887)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:861)
    at com.mysql.jdbc.ConnectionImpl.commit(ConnectionImpl.java:1549)
    at com.alibaba.druid.filter.FilterChainImpl.connection_commit(FilterChainImpl.java:199)
    at com.alibaba.druid.filter.stat.StatFilter.connection_commit(StatFilter.java:267)
    at com.alibaba.druid.filter.FilterChainImpl.connection_commit(FilterChainImpl.java:194)
    at com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl.commit(ConnectionProxyImpl.java:122)
    at com.alibaba.druid.pool.DruidPooledConnection.commit(DruidPooledConnection.java:755)
    at com.mytest.util.mysqlDbUtils.MysqlDbUtils.executeBatch(MysqlDbUtils.java:58)
    at com.mytest.util.mysqlDbUtils.MysqlDbUtils.executeBatchNew(MysqlDbUtils.java:156)
    at com.mytest.kafkadpu.analysisData.eventData.EventDataDealUnit.dealData(EventDataDealUnit.java:72)
    at com.mytest.kafkadpu.consumerGroup.ConsumerDealDataThread.run(ConsumerDealDataThread.java:121)

而我的配置如下:

url=mysql connection url
username=username
password=password
filters=stat
initialSize=20
minIdle=20
maxActive=100
maxWait=60000
timeBetweenEvictionRunsMillis=63000
minEvictableIdleTimeMillis=300000
validationQuery=SELECT 1
validationQueryTimeout=100
removeAbandoned=true
removeAbandonedTimeoutMillis=60000
logAbandoned=false
testWhileIdle=true
testOnBorrow=false
testOnReturn=false
poolPreparedStatements=true
maxPoolPreparedStatementPerConnectionSize=300
defaultAutoCommit=false
keepAlive=true

我尝试将 testOnBorrow 设置为 true 或 false,但它们都无效。

标签: javamysqljdbcdruid

解决方案


autoReconnect=true&failOverReadOnly=false

推荐阅读