Java测验应用Jar包在局域网客户端运行时MySQL连接超时问题
本地运行Java测验应用Jar包时数据库连接正常,但部署到局域网其他客户端机器时,抛出以下错误:
com.mysql.jdbc.CommunicationsException: Communications link failure due to underlying exception:
** BEGIN NESTED EXCEPTION **
java.net.SocketException
MESSAGE: java.net.ConnectException: Connection timed out: connect
STACKTRACE:
java.net.SocketException: java.net.ConnectException: Connection timed out: connect
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:151)
结合你提供的数据库连接代码(已将连接字符串改为局域网IP 192.168.150.105),以下是针对性的排查和解决步骤:
检查数据库服务器防火墙
确保数据库所在机器(192.168.150.105)的防火墙允许3306端口的入站连接:- Windows系统:在防火墙高级设置中添加规则,开放3306端口给局域网网段;
- Linux系统:执行
firewall-cmd --add-port=3306/tcp --permanent,再重启防火墙服务。
修改MySQL远程访问权限
默认root用户仅允许本地访问,需要授权其从局域网连接:
登录MySQL服务器,执行以下SQL:GRANT ALL PRIVILEGES ON demoquiz.* TO 'root'@'%' IDENTIFIED BY ''; FLUSH PRIVILEGES;若要限制特定网段访问,可将
%替换为192.168.150.%,提升安全性。调整MySQL绑定地址配置
打开MySQL配置文件(my.cnf或my.ini),找到bind-address项:- 将值改为
0.0.0.0(允许所有IP访问)或192.168.150.105(仅局域网IP访问),不要保留默认的127.0.0.1(仅本地访问);
修改后重启MySQL服务生效。
- 将值改为
测试客户端与服务器的网络连通性
在客户端机器上执行:ping 192.168.150.105:验证网络是否可达;telnet 192.168.150.105 3306:验证3306端口是否开放,连接失败则回到防火墙或MySQL配置排查。
代码优化建议(可选)
你的代码每次操作都创建新连接,建议使用连接池(如HikariCP)管理连接,提升性能与稳定性;另外JDBC4.0+版本可省略Class.forName("com.mysql.jdbc.Driver");,驱动会自动注册。
内容的提问来源于stack exchange,提问作者Jay Patel

