java - JDBC 无法连接到 MySQL DB
问题描述
情况
我正在尝试构建一个简单的 JavaEE 应用程序。我在 WSL 中运行 MySQL 数据库,并在 Windows 中通过 IntelliJ 配置 TomEE。我之前已成功连接到此设置中的数据库。在继续开发我的应用程序并重新部署以测试进度后,我突然开始收到“通信链接故障”异常。我的 pom.xml 或有关连接的代码没有任何变化。WSL 终端中的 Netstat 命令显示 MySQL 正在侦听预期端口。
IntelliJ 控制台中的错误消息
Caused by: com.mysql.cj.exceptions.CJCommunicationsException: 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 java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61)
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105)
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151)
at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:167)
at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:89)
at com.mysql.cj.NativeSession.connect(NativeSession.java:144)
at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:953)
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:823)
... 49 more
Caused by: java.net.ConnectException: Connection refused: connect
at java.base/java.net.PlainSocketImpl.connect0(Native Method)
at java.base/java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:101)
at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:399)
at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:242)
at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:224)
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:403)
at java.base/java.net.Socket.connect(Socket.java:591)
at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:155)
at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:63)
... 52 more
连接代码
public Connection getConnection() throws RuntimeException {
try {
DatabaseProperties props = new DatabaseProperties();
var url = props.getUrl();
var host = props.getHost();
var password = props.getPassword();
Class.forName("com.mysql.cj.jdbc.Driver");
return DriverManager.getConnection(url, host, password);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException();
}
}
database.properties 文件
url = jdbc:mysql://127.0.0.1:3306/spotitube
host = root
password = wachtwoord
pom依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.23</version>
</dependency>
输出 - netstat -tulnp
(No info could be read for "-p": geteuid()=1000 but you should be root.)
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:33060 0.0.0.0:* LISTEN -
输出 - sudo 服务 mysql 状态
/usr/bin/mysqladmin Ver 8.0.23-0ubuntu0.20.04.1 for Linux on x86_64 ((Ubuntu))
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Server version 8.0.23-0ubuntu0.20.04.1
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/run/mysqld/mysqld.sock
Uptime: 23 min 33 sec
怎么办?
我试过了:
- 重新启动 MySQL 服务器
- 重启 TomEE 服务器
- mvn 清洁
没有任何帮助。正如我之前所说,此代码和设置之前有效。有人知道我可以尝试什么吗?
解决方案
推荐阅读
- javascript - 从数组中选择数据并在段落中显示另一个数组中的数据 - javascript
- javascript - 谷歌云功能没有收到来自客户端的输入
- javascript - 如何将 html 画布转换为图像,然后将该画布绘制到画布上
- c# - OnGround Raycast 在缩放 fps 字符后不起作用
- javascript - 为什么这不会在第二次单击按钮时将 el 更改为 msgTwo?
- angular - 以角度显示表单字段错误的灵活方法是什么
- mobx - Mobx 反应不跟踪从构造函数参数传递的可观察值
- html - 你如何制作一个覆盖整个顶部屏幕的导航栏?
- java - 无法使用 java 套接字将图像从 android studio 发送到 pc,filePath 返回 null
- reactjs - 做什么{" "} 在 react.js 中是什么意思?