微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure

最近启动项目,连接自己本地数据库时,出现了如下异常

ERROR [com.alibaba.druid.pool.DruidDataSource] - create connection error, url: jdbc:MysqL://127.0.0.1:3306/db_local?serverTimezone=UTC&useSSL=false&autoReconnect=true, errorCode 0, state 08001 java.sql.sqlNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.

这其实就是数据库没开启导致,开启就可以了

不过,MysqL服务器认的“wait_timeout”是28800秒即8小时,意味着如果一个连接的空闲时间超过8个小时,MysqL自动断开该连接,而连接池却认为该连接还是有效的(因为并未校验连接的有效性),当应用申请使用该连接时,就会导致上面的报错。

 

所以最好,我们修改一下这个时间

解决问题步骤

1.MysqL5以前的版本可以直接在jdbc连接url的配置中附加上“autoReconnect=true”。

2.将MysqL全局变量wait_timeout的值修改为最大。查看MysqL5的手册,发现windows和linux下wait_timeout的最大值分别是24天和365天。

  • 文件my.ini的最后增加一行:wait_timeout=1814400。(该文件,windows下在MysqL的安装目录下,linux下位置为/etc/my.ini)笔者的目录为:MysqL\Data\MysqL Server 8.0下

  • 重启MysqL

 

具体异常如下:

[2019-04-20 18:05:24.161] [Druid-ConnectionPool-Create-1967852205] ERROR [com.alibaba.druid.pool.DruidDataSource] - create connection error, url: jdbc:MysqL://127.0.0.1:3306/db_local?serverTimezone=UTC&useSSL=false&autoReconnect=true, errorCode 0, state 08001
java.sql.sqlNonTransientConnectionException: Could not create connection to database server. Attempted reconnect 3 times. Giving up.
	at com.MysqL.cj.jdbc.exceptions.sqlError.createsqlException(sqlError.java:108)
	at com.MysqL.cj.jdbc.exceptions.sqlError.createsqlException(sqlError.java:95)
	at com.MysqL.cj.jdbc.exceptions.sqlError.createsqlException(sqlError.java:87)
	at com.MysqL.cj.jdbc.exceptions.sqlError.createsqlException(sqlError.java:61)
	at com.MysqL.cj.jdbc.exceptions.sqlError.createsqlException(sqlError.java:71)
	at com.MysqL.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:932)
	at com.MysqL.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:857)
	at com.MysqL.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:444)
	at com.MysqL.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:230)
	at com.MysqL.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:226)
	at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:148)
	at com.alibaba.druid.filter.stat.StatFilter.connection_connect(StatFilter.java:211)
	at com.alibaba.druid.filter.FilterChainImpl.connection_connect(FilterChainImpl.java:142)
	at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1410)
	at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1464)
	at com.alibaba.druid.pool.DruidDataSource$CreateConnectionThread.run(DruidDataSource.java:1969)
Caused by: com.MysqL.cj.exceptions.CJCommunicationsException: Communications link failure

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐