0

有人可以解释为什么以下程序在 3 秒后超时,而我将其设置为在 12 秒后这样做。我特意关掉了mysql服务器来测试这个mysql服务器不可达的场景。

import java.sql.Connection;
import java.sql.DriverManager;

/**
 *
 * @author dhd
 */
public class TestMysql {

    static Thread trd;

    public static void main(String[] argv) {
        keepTrack();
        try {
            DriverManager.setLoginTimeout(12);
            Class.forName("com.mysql.jdbc.Driver");
            Connection c = DriverManager.getConnection("jdbc:mysql://localhost:3306/driving", "root", "");
        } catch (Exception ex) {
            System.err.println(ex.getMessage());
            trd.stop();
        }
    }

    public static void keepTrack() {
        trd = new Thread(new Runnable() {
            @Override
            public void run() {
                int i = 1;
                while (true) {
                    System.out.println(i);
                    try {
                        Thread.sleep(1000);
                    } catch (Exception ex) {
                    }
                    i++;
                }
            }
        });
        trd.start();
    }
}

输出是:

跑:
1
2
3
通讯链路故障

最后一个成功发送到服务器的数据包是 0 毫秒前。驱动程序没有收到来自服务器的任何数据包。
构建成功(总时间:3 秒)。

从 netbeans 运行。在问我为什么需要这个之前,请先回答。谢谢

4

1 回答 1

1

如果 MySQL 服务器未运行,则连接不会超时;操作系统立即回复“连接被拒绝”错误。要使连接超时,您可以做的一件事是配置防火墙以丢弃所有到达 MySQL 端口的数据包。

于 2013-09-21T08:56:26.630 回答