mysql 报错 MySQLNonTransientConnectionException
Method threw 'com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException' exception.
通过客户端可以正常访问。
mysql server 为 8.0 版本。
本地的驱动为
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.29</version>
</dependency>
对应的配置文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/test
jdbc.username=root
jdbc.password=123456
原因
MySQL版本和驱动包不兼容的问题,所以将MySQL驱动改为了最新的8.0版本的MySQL驱动。
解决方式
第一步:使用最新的MySQL驱动jar包。
第二步:把驱动的类名改为:
static String driver=”com.mysql.cj.jdbc.Driver”;
第三步:在访问mysql的url后加入时区设置:
static String url=”jdbc:mysql://localhost:3306/test?characterEncoding=utf-8&serverTimezone=UTC”;(UTC表示标准时区)
实际使用版本
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.13</version>
</dependency>
调整配置文件:
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test?characterEncoding=utf-8&serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
第二个报错
然后开始执行方法,结果链接成功,但是有另一个报错:
** BEGIN NESTED EXCEPTION **
javax.net.ssl.SSLException
MESSAGE: closing inbound before receiving peer's close_notify
STACKTRACE:
javax.net.ssl.SSLException: closing inbound before receiving peer's close_notify
at java.base/sun.security.ssl.SSLSocketImpl.shutdownInput(SSLSocketImpl.java:848)
at java.base/sun.security.ssl.SSLSocketImpl.shutdownInput(SSLSocketImpl.java:826)
at com.mysql.cj.protocol.a.NativeProtocol.quit(NativeProtocol.java:1312)
at com.mysql.cj.NativeSession.quit(NativeSession.java:182)
at com.mysql.cj.jdbc.ConnectionImpl.realClose(ConnectionImpl.java:1750)
at com.mysql.cj.jdbc.ConnectionImpl.close(ConnectionImpl.java:720)
....
原因
在配置文件中数据库连接的url属性中加入 useSSL=false 即可解决
完整配置
<dataSource>
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test?characterEncoding=utf-8&serverTimezone=UTC&useSSL=false"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
参考资料
com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException异常解决方法
https://blog.csdn.net/qq_48455576/article/details/120261163