大家好,又见面了,我是你们的朋友全栈君。
具体错误信息
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet successfully received from the server was 1,548,635,756,564 milliseconds ago. The last packet sent successfully to the server was 0 milliseconds ago.
1、一般是由于连接的Ip地址、用户名、密码有误
2、 特殊的情况
2.1、在JDBC URL中使用autoReconnect属性,实际测试时使用了autoReconnect=true&failOverReadOnly=false,网上所说的只对mysql 4之前的版本有效。
2.2、修改MySQL的参数,wait_timeout最大为31536000即1年,在my.cnf中加入:
[mysqld]
wait_timeout=31536000
interactive_timeout=31536000
重启生效,需要同时修改这两个参数
两种解决异常:“The last packet sent successfully to the server was 0 milliseconds ago. ”的办法
原因:由于数据库回收了连接,而系统的缓冲池不知道,继续使用被回收的连接所致的。
第一种解决办法
将mysql回收空闲连接的时间变长,mysql默认是8小时,可以在mysql目录下的my.ini中增加下面配置,将时间改为1天。
[mysqld]
wait_timeout=86400
第二种解决办法
可以通过配置,让缓冲池去测试连接是否被回收,如果被回收,则不继续使用,以dbcp为例
知识点:
#SQL查询,用来验证从连接池取出的连接
dbcp.validationQuery=SELECT 1
#指明连接是否被空闲连接回收器(如果有)进行检验,如果检测失败,则连接将被从池中去除
dbcp.testWhileIdle=true
#在空闲连接回收器线程运行期间休眠的时间值,以毫秒为单位,一般比minEvictableIdleTimeMillis小
dbcp.timeBetweenEvictionRunsMillis=300000
#在每次空闲连接回收器线程(如果有)运行时检查的连接数量,最好和maxActive一致
dbcp.numTestsPerEvictionRun=50
#连接池中连接,在时间段内一直空闲,被逐出连接池的时间(1000*60*60),以毫秒为单位
dbcp.minEvictableIdleTimeMillis=3600000
————————————————————————————-
<!– dataSourceNew start–>
<bean id=”dataSourceNew” class=”org.apache.commons.dbcp.BasicDataSource”>
<!– 设置JDBC驱动名称 –>
<property name=”driverClassName” value=”${jdbc.driver}” />
<!– 设置JDBC连接URL –>
<property name=”url” value=”${jdbc.url.new}” />
<!– 设置数据库用户名 –>
<property name=”username” value=”${jdbc.username.new}” />
<!– 设置数据库密码 –>
<property name=”password” value=”${jdbc.password.new}” />
<!– 设置连接池初始值 –>
<property name=”initialSize” value=”5″ />
<!– 设置连接池最大值 –>
<property name=”maxActive” value=”8″ />
<!– 设置连接池最小空闲值 –>
<property name=”minIdle” value=”5″ />
<!– 设置连接池最大空闲值 –>
<property name=”maxIdle” value=”5″ />
<property name=”validationQuery”>
<value>SELECT 1</value>
</property>
<property name=”testWhileIdle”>
<value>true</value>
</property>
<property name=”timeBetweenEvictionRunsMillis”>
<value>300000</value>
</property>
<property name=”numTestsPerEvictionRun”>
<value>8</value>
</property>
<property name=”minEvictableIdleTimeMillis”>
<value>3600000</value>
</property>
</bean>
————————————————————————————-
您的支持是我分享经验的动力
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/152257.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...