问题

这个问题就是在启动项目时,根据配置MySQL的连接信息,连接数据库并检查没有该数据库需要创建的功能,不过在启动后报错:

com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure
The driver has not received any packets from the server.
javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)

详细报错如图:
在这里插入图片描述

报错的代码位置是获取尝试建立到给定数据库URL的连接:

 Connection con= DriverManager.getConnection(connectUrl, use, pswd);

解决方法

如上的最好报错 javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
就是协议被禁用或密码套件不合适给了很好的提示,这里直接尝试禁用useSSL(useSSL=false),即将连接的Url改为:

String connectUrl = "jdbc:mysql://" + host + ":" + port+"?useSSL=false";

如下是mysql ssl相关的说明:
SSL(Secure Sockets Layer 安全套接字协议),在mysql进行连接的时候,如果mysql的版本是5.7之后的版本必须要加上useSSL=false,mysql5.7以及之前的版本则不用进行添加useSSL=false,会默认为false,一般情况下都是使用useSSL=false,尤其是在将项目部署到linux上时,一定要使用useSSL=false!!!,useSSL=true是进行安全验证,一般通过证书或者令牌什么的,useSSL=false就是通过账号密码进行连接,通常使用useSSL=false!!!

运行后上面的错误消失了,而是报时区相关的错误:
在这里插入图片描述

java.sql.SQLException: The server time zone value ‘***’ is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)。

网上的说法是设置全局时区:

set global time_zone =+8:00;

我操作后也无效的。

最后也是修改连接mysql的Url:

String connectUrl = "jdbc:mysql://" + host + ":" + port+"?useSSL=false&serverTimezone=UTC";

就是数据库连接改为使用UTC时区(世界标准时间)。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐