com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路故障

Posted

技术标签:

【中文标题】com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路故障【英文标题】:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 【发布时间】:2010-06-06 05:49:10 【问题描述】:

我正在努力让我的数据库与我的 Java 程序对话。

谁能给我一个使用 JDBC 的快速而肮脏的示例程序?

我遇到了一个相当惊人的错误:

Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 
    The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1122)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2260)
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:787)
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:49)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:357)
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
    at java.sql.DriverManager.getConnection(DriverManager.java:582)
    at java.sql.DriverManager.getConnection(DriverManager.java:207)
    at SqlTest.main(SqlTest.java:22)
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
    The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1122)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:344)
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2181)
    ... 12 more
Caused by: java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432)
    at java.net.Socket.connect(Socket.java:529)
    at java.net.Socket.connect(Socket.java:478)
    at java.net.Socket.<init>(Socket.java:375)
    at java.net.Socket.<init>(Socket.java:218)
    at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256)
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:293)
    ... 13 more

测试文件内容:

import com.mysql.jdbc.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class SqlTest 

    public static void main(String [] args) throws Exception 
        // Class.forName( "com.mysql.jdbc.Driver" ); // do this in init
        // // edit the jdbc url 
        Connection conn = DriverManager.getConnection( 
            "jdbc:mysql://localhost:3306/projects?user=user1&password=123");
        // Statement st = conn.createStatement();
        // ResultSet rs = st.executeQuery( "select * from table" );

        System.out.println("Connected?");
    

【问题讨论】:

我是个笨蛋。 MySQL服务器未启动:(启动成功。 我将 Springboot 数据源从 url:jdbc:mysql://XXX208465:localhost:3306/orv21_kafka_schema 更改为 url:jdbc:mysql://localhost:3306/orv21_kafka_schema。所以不需要 XXX208465,这是我笔记本电脑的主机名。我在本地安装了 mysql 并通过 mySQL CLI 使用它 【参考方案1】:

所以,你有一个

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路故障 java.net.ConnectException:连接被拒绝

我引用 this answer 的内容,其中还包含 MySQL+JDBC 分步教程:

如果您收到SQLException: Connection refusedConnection timed out 或特定于MySQL 的CommunicationsException: Communications link failure,则意味着根本无法访问数据库。这可能有以下一种或多种原因:

    JDBC URL 中的 IP 地址或主机名错误。 本地 DNS 服务器无法识别 JDBC URL 中的主机名。 JDBC URL 中的端口号缺失或错误。 数据库服务器已关闭。 数据库服务器不接受 TCP/IP 连接。 数据库服务器已用完连接。 Java 和 DB 之间的某些东西阻塞了连接,例如防火墙或代理。

要解决其中一个问题,请遵循以下建议:

    使用ping 验证和测试它们。 刷新 DNS 或改用 JDBC URL 中的 IP 地址。 根据 MySQL DB 的my.cnf 进行验证。 启动数据库。 验证mysqld是否在没有--skip-networking option的情况下启动。 重新启动数据库并相应地修复您的代码以关闭finally 中的连接。 禁用防火墙和/或配置防火墙/代理以允许/转发端口。

另见:

How should I connect to JDBC database / datasource in a servlet based application? Is it safe to use a static java.sql.Connection instance in a multithreaded system?

【讨论】:

MAMP/ MAMP Pro 默认设置 MAMP_skip-networking_MAMP。您必须在 my.cfn 中禁用此行 不是这种情况,但是当您使用连接池并且连接由于长时间不活动而关闭时,也会发生通信链接故障。只有在这种情况下,它才会显示“最后一个数据包是在“X”秒前收到的” @nikel 不应该通过触发“select 1”验证查询来保持连接池中的线程处于活动状态吗?当我们将 evictor 设置为以比 mysql 服务器超时更短的时间间隔运行时,为什么它们会因长时间不活动而关闭? 是的,验证查询可以解决这个问题。我的观点是关于未设置且池中的连接由于不活动而超时的情况 我有同样的问题,我通过更改 jdbc 驱动程序版本解决了它,它工作得很好【参考方案2】:

就我而言,我需要将 Localhost 替换为实际的数据库服务器 IP 地址

代替

 Connection con = DriverManager.getConnection(
 "jdbc:mysql://localhost:3306/DBname", "root", "root");

我需要

 Connection con = DriverManager.getConnection(
 "jdbc:mysql://192.100.0.000:3306/DBname", "root", "root");

【讨论】:

在 2018 年 4 月 5 日的最新更新中:目前,我使用的是 MySQL Workbench 6.3。我来这里是为了检查解决方案,但我自己找到了,只是您的 MySQL 服务器没有运行或已停止。我重新启动了我的服务器,它就像一个魅力。 这是“最佳解决方案”,为什么?它解决了什么问题,如何解决? 此解决方案无法生成数据帧【参考方案3】:

当 Java 堆外时,我捕获了这个异常。如果我尝试将许多数据项放入 RAM - 首先我会捕获“Communications link failure”,然后是“OutOfMemoryError”。

我记录了它并减少了内存消耗(删除 1/2 数据),一切正常。

【讨论】:

【参考方案4】:

如果您的数据库连接长时间空闲,则会出现此com.mysql.jdbc.exceptions.jdbc4.CommunicationsException 异常。

这个空闲连接在connection.isClosed(); 上返回true,但是如果我们尝试执行语句,那么它会触发这个异常,所以我建议使用数据库池。

【讨论】:

它也会因为“连接被拒绝”等其他原因而发生。【参考方案5】:

在我的情况下,原来是mysql-connector-java的版本太旧了。

在我的演示中,我以某种方式使用 mysql-connector-java,如下所示:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.9</version>
</dependency>

但是在开发环境中,我用的是这个:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.31</version>
</dependency>

我的 MySQL 版本是 5.1.48(是的,它很旧,只是为了模仿产品版本)。所以我遇到了同样的错误。

既然找到了原因,也就找到了解决办法。匹配版本!

【讨论】:

不太可能。所有这些驱动程序版本都应该向后兼容。 这个问题似乎在新的 mysql 连接器中得到修复,见***.com/questions/14559794/… 对我来说同样的情况。驱动版本是MySQL 5,而服务器版本是8。所以我更新了jar的版本,问题解决了。【参考方案6】:

几个小时以来我一直遇到同样的问题。我正在使用 MAMP 服务器

不要使用 localhost:[Apache Port],而是使用您的 MySQL 端口。

以下是 MAMP 服务器的默认 MySQL 端口。

String url = "jdbc:mysql://localhost:8889/db_name";

Connection conn = DriverManager.getConnection(url, dbUsername, dbPassword);

【讨论】:

如果你在安装Mysql之前有mamp,那么试试这个方法【参考方案7】:

我可能在这里找错了树,但您的异常似乎表明您的 MySQL 服务器不可用。

线程“主”com.mysql.jdbc.exceptions.jdbc4.CommunicationsException 中的异常: 通信链路故障最后一个成功发送到服务器的数据包为 0 毫秒前。驱动程序没有收到来自服务器的任何数据包。在...

如果你尝试(从终端)会发生什么

mysql -u username -p

系统将提示您输入与用户名关联的密码。输入正确密码后,mysql客户端是否连接?

如果没有,您可能必须从首选项中启动 MySQL。您也可以将其设置为在启动时运行。

【讨论】:

我正在使用 MAMP 运行我的 MySQL 服务器。这会是个问题吗? 当我(通过 Sequal Pro)连接到我的localhost 时,我使用了正确的用户名/密码,并且工作正常。【参考方案8】:

较早的答案是合适的。但是,我还想指出一个更普遍的问题。

我遇到了类似的问题,原因是我公司的网络限制。

当我在任何其他网络中时,相同的连接正在成功。

【讨论】:

这个指针解决了我的问题,当我连接到 *** 时,指定 'localhost' 工作正常,但如果我从 *** 断开连接,同样不能工作,但是我通过将 'localhost' 更改为 '127.0. 0.1'【参考方案9】:

如果 Java 尝试通过 SSL 连接到 MySQL,也可能会发生此错误,但出现问题。 (就我而言,我正在将 Payara Server 5.193.1 连接池配置到 MySQL。)

有人建议设置useSSL=false。但是,由于 Connector/J 版本 8.0.13,该设置已被弃用。这是MySQL Connector/J 8.0 Configuration Properties的摘录:

ssl模式

默认情况下,网络连接是 SSL 加密的;此属性允许关闭安全连接,或选择不同的安全级别。允许以下值:DISABLED - 建立未加密的连接; PREFERRED - (默认)如果服务器启用了加密连接,则建立加密连接,否则回退到未加密连接; REQUIRED - 如果服务器启用了安全连接,则建立安全连接,否则失败; VERIFY_CA - 与 REQUIRED 类似,但另外根据配置的证书颁发机构 (CA) 证书验证服务器 TLS 证书; VERIFY_IDENTITY - 与 VERIFY_CA 类似,但另外验证服务器证书是否与尝试连接的主机匹配。

此属性替换了已弃用的旧属性 useSSLrequireSSLverifyServerCertificate,它们仍然被接受,但如果 sslMode 未明确设置,则转换为 sslMode 的值:useSSL=false 已转换给sslMode=DISABLED"useSSL=true", "requireSSL=false", "verifyServerCertificate=false" 被翻译成sslMode=PREFERRED"useSSL=true", "requireSSL=true", "verifyServerCertificate=false" 被翻译成sslMode=REQUIRED"useSSL=true" AND "verifyServerCertificate=true" 被翻译成sslMode=VERIFY_CAsslMode=VERIFY_IDENTITY 没有等效的旧设置。请注意,对于所有服务器版本,sslMode 的默认设置为PREFERRED,它相当于useSSL=truerequireSSL=falseverifyServerCertificate=false 的旧设置,它们与它们的默认设置不同在某些情况下,Connector/J 8.0.12 和更早版本。应审查继续使用旧属性并依赖其旧默认设置的应用程序。

如果显式设置了sslMode,则忽略旧属性。如果没有明确设置sslModeuseSSL,则应用默认设置sslMode=PREFERRED

默认PREFERRED

自版本:8.0.13

因此,就我而言,设置sslMode=DISABLED 就是解决问题所需要的。 这是在测试机器上。但对于生产来说,安全的解决方案是正确配置 Java 客户端和 MySQL 服务器以使用 SSL。


请注意,通过禁用 SSL,您可能还需要设置 allowPublicKeyRetrieval=true。 (同样,从安全角度来看,这不是一个明智的决定)。 MySQL ConnectionString Options提供更多信息:

允许公共密钥检索

如果用户账号使用sha256_password认证,传输过程中必须保护密码; TLS 是首选的机制,但如果它不可用,则将使用 RSA 公钥加密。要指定服务器的 RSA 公钥,请使用ServerRSAPublicKeyFile 连接字符串设置,或设置AllowPublicKeyRetrieval=True 以允许客户端自动向服务器请求公钥。请注意,AllowPublicKeyRetrieval=True 可能允许恶意代理执行 MITM 攻击以获取明文密码,因此默认为 False,必须显式启用。

【讨论】:

来自Payara Server GitHub的相关帖子。【参考方案10】:

就我而言,解决方案是将预期的 TLS 协议添加到连接字符串中,如下所示:

jdbc:mysql://localhost:3306/database_name?enabledTLSProtocols=TLSv1.2

【讨论】:

非常感谢!我扯着头发想知道怎么了。我可以使用 MySQL Workbench 进行连接,但不能通过 Java 代码和连接字符串来连接我认为是相同的 RDS 实例。 欢迎。很高兴我的回答帮助您解决了这个问题。 也非常感谢我。我花了很多时间寻找你的答案。【参考方案11】:

我得到了同样的错误,因为我试图在不启动 mysql 服务器的情况下运行我的程序。

启动mysql服务器后,一切正常。

【讨论】:

【参考方案12】:

请在 /etc/mysql/my.cnf 文件中更新您的 IP 地址

bind-address  = 0.0.0.0

重启mysql守护进程和mysql服务。

【讨论】:

编辑使用有效的绑定地址【参考方案13】:

在Mysql 下载 MySQL-JDBC-Type-4-Treiber(例如,来自“mysql-connector-java-5.1.11.zip”的“mysql-connector-java-5.1.11-bin.jar”)。

您需要在编译和运行时在类路径中包含驱动程序 jar。

Class.forName( "com.mysql.jdbc.Driver" ); // do this in init
// edit the jdbc url 
Connection conn = DriverManager.getConnection( "jdbc:mysql://MyDbComputerNameOrIP:3306/myDatabaseName", username, password );
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery( "select * from table" );

【讨论】:

不,给我一个关于找不到任何东西的错误风暴。是否可以在没有 JAR 文件的情况下导入它? @Josh 这行得通,你真的只需要正确设置你的类路径。 (或者将 jar 复制到您的 %JAVA_HOME%\jre\lib\ext 目录中,但这被认为是不好的做法)【参考方案14】:

我的同样问题通过以下步骤解决:

    转到my.cnf

    vi /etc/mysql/my.cnf
    

    修改其绑定地址

    "bind-address = 0.0.0.0"
    

    重启 MySQL

    sudo /etc/init.d/mysql restart
    

【讨论】:

【参考方案15】:

如果您使用WAMPXAMP 服务器安装mysql 数据库。 然后你必须明确启动mysql服务器,否则它会显示 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 连接数据库时

【讨论】:

【参考方案16】:

我以一种简单的方式解决了这个问题,这对我有用。我遇到了问题“com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链接故障”。在我的 db.properties 文件中,我有这个:url:jdbc:mysql://localhost:90/myDB, 只删除了端口 url ,导致这种方式 url:jdbc:mysql://localhost/myDB 对我有用。

【讨论】:

【参考方案17】:

当我在 my.ini 和 php.ini 文件中将 mysql 端口从 3306 更改为 3307 时,这发生在我身上,但在将端口 (3307->3306) 更改回来后,它又可以正常工作了。

【讨论】:

【参考方案18】:

如果您更改了端口,则会收到此类错误“com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure” 请检查您的端口号

【讨论】:

【参考方案19】:

尝试将localhost 更改为127.0.0.1

本地主机将被解析为::1。并且 MySQL 默认无法通过 IPv6 连接。

这是telnet localhost 3306的输出:

$ telnet localhost 3306
Trying ::1...

并且没有来自 MySQL 服务器的响应。

当然,请确保您的 MySQL 服务器正在运行。

【讨论】:

这实际上是你的 /etc/hosts 文件的问题,而不是 Mysql @cricket_007 默认情况下,localhost 解析为 ::1 而不是 127.0.0.1。 当然,只有启用了 ipv6 并且取决于主机文件【参考方案20】:
dbhost=jdbc:mysql://172.18.23.100:3306/yourdatabase?useUnicode=yes&characterEncoding=UTF-8&useSSL=false
user=root
password=Password#321

con = DriverManager.getConnection(dbhost, user, password);

如果 mysql 版本 8 或更高版本用户更新了连接器

【讨论】:

这是正确的答案,只需在使用 MySQL 驱动程序 8 或更高版本时将 useSSL=false 添加到连接字符串即可。 尝试了很多其他修复。但这行得通。【参考方案21】:

在我的情况下,原来是 mysql-connector-java 的版本不同。 我刚把mysql jdbc改成maria jbdc

旧的 jdbc 驱动

<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.21</version>
</dependency>


新的 Jdbc 驱动程序

<!-- https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client -->
<dependency>
    <groupId>org.mariadb.jdbc</groupId>
    <artifactId>mariadb-java-client</artifactId>
    <version>2.6.2</version>
</dependency>

【讨论】:

MariaDB 是 MySQL 的一个分支,但实际上它们是两个不同的数据库。在这种情况下,您建议使用其他 JDBC 驱动程序不是解决方案,这是由于服务器未启动造成的。 谢谢,但在浪费了许多小时没有成功之后,它对我有用。只是想与他人分享。也许它可以帮助并节省时间。 已经在这里待了将近 1 个小时,这是唯一有效的方法。谢谢@adnan【参考方案22】:

刚刚经历过。

必须通过以下方式使其工作: (这个可以放在静态块初始化器中)

static // would have to be surrounded by try catch
    Class.forName("com.mysql.jdbc.Driver");   // this will load the class Driver

也可以通过以下方式获取连接:

conn = DriverManager.getConnection(DBURL,<username>,<password>);

而不是指定登录参数

  Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/projects?user=user1&password=123");

问候。

【讨论】:

自 2007 年以来不再需要静态块,您可以指定任何一种方式的登录参数。【参考方案23】:

对于远程调用Mysql

    远程用户添加到Mysql,例如IP=remoteIP:

    mysql -u xxxx -p //local coonection to mysql
    mysql> GRANT ALL PRIVILEGES ON *.* TO 'theNewUser'@'remoteIP' IDENTIFIED BY 'passWord';
    //Query OK, 0 rows affected (xx sec)
    mysql> FLUSH PRIVILEGES;
    //Query OK, 0 rows affected
    

    允许远程访问 Mysql(默认不允许所有外部调用):

    Edit 
    /etc/mysql/mysql.conf.d/mysqld.cnf    or    /etc/mysql/my.cnf
    Change line:  bind-address = 127.0.0.1   to
                  bind-address = 0.0.0.0
    Restart Mysql: /etc/init.d/mysql restart
    

    对于最新版本的 JDBC 驱动程序,JDBC :

    jdbc.url='jdbc:mysql://remoteIP:3306/yourDbInstance?autoReconnect=true&amp;useUnicode=true&amp;useJDBCCompliantTimezoneShift=true&amp;useLegacyDatetimeCode=false&amp;serverTimezone=UTC'
    jdbc.user='theNewUser'
    

【讨论】:

【参考方案24】:

我在远程 Jenkins 服务器上运行自动化测试时遇到了这个问题。但是,在本地运行测试时没有出现任何问题。

对我来说,在将 mysql-connector 版本更新到 POM 文件中的最新版本后,这个问题得到了解决,因为 MySQL 版本在服务器端发生了更改。

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.24</version>
</dependency>

但同样的调试结果有点困难,花了将近两天的时间,因为我不知道 MySQL 版本的变化,而且它在本地运行良好。

【讨论】:

你为我节省了很多调试时间。我遇到了完全相同的情况,从“8.0.16”更新到“8.0.25”修复了它。对 mysql 连接器开发人员在补丁版本中破坏兼容性感到羞耻。【参考方案25】:

我遇到了同样的问题,解决方法如下:

    我的 .jsp 正在调用我尚未在 servlet。 我有两个列名,我通过 ResultSet (getString("columnName")) 传递给一个对象,这与我的数据库中的列名不匹配。

我不确定是哪一个解决了这个问题,但它确实有效。此外,请务必为每个表查询创建一个新的 StatementResultSet

【讨论】:

(1)当然不会引起这个问题。【参考方案26】:

这可能是一个简单的 jar 问题。可能您使用的是旧的mysql-connector-java-XXX-bin.jar,您当前的 mysql 版本不支持它。我使用mysql-connector-java-5.1.18-bin.jar 就像我使用mysql 5.5 一样,这个问题已经为我解决了。

【讨论】:

是的,可能存在 jar 不匹配的可能性。 所有这些驱动版本都应该是兼容的。【参考方案27】:

也许你没有启动你的 Mysql 和 Apache 服务器。我从 XAMPP 控制面板启动 Apache 服务器和 Mysql 后,连接成功。

祝你好运!

【讨论】:

【参考方案28】:

对我来说解决的是做两件事: 1. 使用以下 connads 使用一些密码创建除 root 以外的新用户:

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'newuser'@'localhost';
FLUSH PRIVILEGES;

2。在 mysqld.conf 上注释 IP 地址行

然后用新的用户名和密码连接。它应该可以工作。

【讨论】:

您需要对所有远程用户重复此操作,或者添加通配符而不是 Localhost【参考方案29】:

它试图连接到旧版本的 MySQL ('version', '5.1.73' );当您使用较新的驱动程序版本时,您会收到一条错误消息,告诉您使用 "com.mysql.cj.jdbc.Driver 甚至您不必指定使用哪个驱动程序:

加载类com.mysql.jdbc.Driver'. This is deprecated. The new driver class iscom.mysql.cj.jdbc.Driver'。司机是 通过 SPI 自动注册并手动加载驱动程序 类通常是不必要的。

我将声明更改为使用 mysql-connector-java 的 5.1.38 版本,并且在代码中,我保留了 com.mysql.jdbc.Driver

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.38</version>
</dependency>

当我看到 Ankit Jain 的 answer 时,一切都开始了

【讨论】:

【参考方案30】:

我的防火墙阻止了我的 MySQL 监听的 3307 帖子。于是我把端口从3307改成了3306,就可以成功连接数据库了。

【讨论】:

以上是关于com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路故障的主要内容,如果未能解决你的问题,请参考以下文章

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:重复条目 '' 键 'PRIMARY'

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路故障?

错误 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:表不存在

使用 JDBC 访问远程 MySQL 数据库时出现 com.mysql.jdbc.exceptions.jdbc4.CommunicationsException

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路故障