开发者社区 问答 正文

项目用druid,长时间不访问应用,再访问又连接不上了数据库了?报错

@wenshao ,数据库和应用在同一台机,数据库用mysql5.6.20,已经升级druid到最新的1.0.7版本,访问的是localhost的mysql,放一个晚上不访问,第二天访问就报错了,重启服务正常,错误提示:

[Request processing failed; nested exception is org.hibernate.exception.GenericJDBCException: could not inspect JDBC autocommit mode] with root cause
java.net.SocketException: Software caused connection abort: socket write error

我按照druid的示例配置了最小连接数,以及检测连接打开,但是没用的?请问怎么看druid的保持连接池最小连接的检测日志输出???我看看有没有检测连接

展开
收起
爱吃鱼的程序员 2020-06-14 22:38:49 2318 分享 版权
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB

    我修改了mysql的配置到24小时以上的wait_timeout配置,就没有问题,难道druid的检测没生效么??这是mysql的问题,链接自动关闭了。。。。或者你在链接的url上加入自动重连也行的我已经加了重连的。。也没用。。。怎么写?<preclass="brush:java;toolbar:true;auto-links:false;"><propertyname="validationQuery"value="select'x'"/><propertyname="testWhileIdle"value="true"/><propertyname="testOnBorrow"value="false"/><propertyname="testOnReturn"value="false"/><propertyname="timeBetweenEvictionRunsMillis"value="600000"/>



    修改mysql <spanstyle="font-family:微软雅黑,Verdana,sans-serif,宋体;font-size:14px;line-height:normal;background-color:#FFFFFF;">wait_timeout 是愚蠢的做法我也知道,但是这也是没有办法中的办法啊,你贴的这个配置我都配置了的啊,兄台有其他指教么mysql连接默认8小时无活动自动断开,是否是这个原因?是的,感觉就是这个原因,但是我druid连接池是设置好了的,不应该断开才对。

    ?useUnicode=true&characterEncoding=utf8&<spanstyle="color:#E53333;">autoReconnect=true

    <spanstyle="line-height:1.5;font-size:10pt;">就是红色那段

    testWhileIdle=true配置了没?设置了的,<atarget="_blank"rel="nofollow">@xzfx<atarget="_blank"rel="nofollow">@wenshao


    目前设置如下:

    druid.alias=spring-druid
    druid.driver-class=com.mysql.jdbc.Driver
    druid.driver-url=jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=utf-8&autoReconnect=true
    druid.user=whdb
    druid.password=123456
    druid.minEvictableIdleTimeMillis=300000
    druid.maxWait=60000
    druid.timeBetweenEvictionRunsMillis=60000
    druid.maxActive=30
    druid.minIdle=5
    druid.initialSize=5
    druid.testWhileIdle=true

    druid.validationQuery=select1fromtbl_user

    <spanstyle="font-family:微软雅黑,Verdana,sans-serif,宋体;font-size:14px;line-height:normal;background-color:#FFFFFF;">现在将mysql的wait_timeout加大了就没问题。。

    <spanstyle="color:#E53333;"><spanstyle="font-size:14px;line-height:normal;color:#E53333;">我在想要不要在spring加一个task,7个小时自动执行一个简单的查询语句,保持连接的有效性。。。

    昨天我打开了druid的监控,也可以看到druid的监控信息:

    *获取连接时检测            false    是否在获得连接后检测其可用性
    *空闲时检测                true        是否在连接空闲一段时间后检测其可用性
    *连接放回连接池时检测    false    是否在连接放回连接池后检测其可用性

    看这里的监控信息,testwhileidle是生效了的。

    spring的配置:

    <preclass="brush:xml;toolbar:true;auto-links:false;"><beanid="dataSource"class="com.alibaba.druid.pool.DruidDataSource"init-method="init"destroy-method="close"><propertyname="url"value="${druid.driver-url}"/><propertyname="username"value="${druid.user}"/><propertyname="password"value="${druid.password}"/><propertyname="initialSize"value="${druid.initialSize}"/><propertyname="minIdle"value="${druid.minIdle}"/><propertyname="maxActive"value="${druid.maxActive}"/><propertyname="maxWait"value="${druid.maxWait}"/><propertyname="timeBetweenEvictionRunsMillis"value="${druid.timeBetweenEvictionRunsMillis}"/><propertyname="minEvictableIdleTimeMillis"value="${druid.minEvictableIdleTimeMillis}"/><propertyname="validationQuery"value="${druid.validationQuery}"/><propertyname="testWhileIdle"value="${druid.testWhileIdle}"/><propertyname="testOnBorrow"value="false"/><propertyname="testOnReturn"value="false"/><propertyname="poolPreparedStatements"value="true"/><!--closeformysql<propertyname="maxPoolPreparedStatementPerConnectionSize"value="20"/>--></bean>

    <spanstyle="font-family:微软雅黑,Verdana,sans-serif,宋体;font-size:14px;line-height:22px;background-color:#FFFFFF;">Softwarecausedconnectionabort:socketwriteerror

    <spanstyle="font-size:14px;line-height:22px;">这个提示是连接上了,但是socket写入有问题。

    <spanstyle="font-size:14px;line-height:22px;">

    同楼主一样,运行一段时间报错CommunicationsException:Communicationslinkfailure

    <preclass="brush:java;toolbar:true;auto-links:false;">com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:CommunicationslinkfailureThelastpacketsentsuccessfullytotheserverwas0millisecondsago.Thedriverhasnotreceivedanypacketsfromtheserver.atsun.reflect.GeneratedConstructorAccessor48.newInstance(UnknownSource)~[na:na]atsun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)~[na:1.7.0_67]atjava.lang.reflect.Constructor.newInstance(Constructor.java:526)~[na:1.7.0_67]atcom.mysql.jdbc.Util.handleNewInstance(Util.java:411)~[mysql-connector-java-5.1.17.jar:na]atcom.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1116)~[mysql-connector-java-5.1.17.jar:na]atcom.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:344)~[mysql-connector-java-5.1.17.jar:na]atcom.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2333)~[mysql-connector-java-5.1.17.jar:na]atcom.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2370)~[mysql-connector-java-5.1.17.jar:na]atcom.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2154)~[mysql-connector-java-5.1.17.jar:na]atcom.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:792)~[mysql-connector-java-5.1.17.jar:na]atcom.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)~[mysql-connector-java-5.1.17.jar:na]atsun.reflect.GeneratedConstructorAccessor46.newInstance(UnknownSource)~[na:na]atsun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)~[na:1.7.0_67]atjava.lang.reflect.Constructor.newInstance(Constructor.java:526)~[na:1.7.0_67]atcom.mysql.jdbc.Util.handleNewInstance(Util.java:411)~[mysql-connector-java-5.1.17.jar:na]atcom.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:381)~[mysql-connector-java-5.1.17.jar:na]atcom.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305)~[mysql-connector-java-5.1.17.jar:na]atcom.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:142)~[druid-0.2.9.jar:0.2.9]atcom.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:211)~[druid-0.2.9.jar:0.2.9]atcom.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:136)~[druid-0.2.9.jar:0.2.9]atcom.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1271)~[druid-0.2.9.jar:0.2.9]atcom.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1325)~[druid-0.2.9.jar:0.2.9]atcom.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1215)~[druid-0.2.9.jar:0.2.9]Causedby:java.net.ConnectException:Connectionrefused:connectatjava.net.TwoStacksPlainSocketImpl.socketConnect(NativeMethod)~[na:1.7.0_67]atjava.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)~[na:1.7.0_67]atjava.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)~[na:1.7.0_67]atjava.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)~[na:1.7.0_67]atjava.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)~[na:1.7.0_67]atjava.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)~[na:1.7.0_67]atjava.net.Socket.connect(Socket.java:579)~[na:1.7.0_67]atjava.net.Socket.connect(Socket.java:528)~[na:1.7.0_67]atjava.net.Socket.<init>(Socket.java:425)~[na:1.7.0_67]atjava.net.Socket.<init>(Socket.java:241)~[na:1.7.0_67]atcom.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:257)~[mysql-connector-java-5.1.17.jar:na]atcom.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:294)~[mysql-connector-java-5.1.17.jar:na]...17commonframesomitted00:00:31.875[Druid-ConnectionPool-Create]ERRORc.alibaba.druid.pool.DruidDataSource-createconnectionerror



    2020-06-14 22:39:06
    赞同 展开评论