如何强制超时为DriverManager.getConnection()方法调用?

我有一个应用程序,它将与 MySQL建立数据库连接并执行查询.有时,DriverManager.getConnection()方法调用需要2秒,有时需要30秒.有没有办法控制此方法2秒后超时?

DriverManager.setLoginTimeout()似乎不起作用.

实际上,我可以通过将线程休眠为超时值并在唤醒后关闭连接来为statement.executeQuery()设置超时.但它的连接建立部分我无法真正设置超时.

非常感谢任何帮助.

解决方法

如果没有其他选项,您可以始终只在一个单独的线程中执行调用,如果它在2秒内没有完成,您将中止/忽略该线程.

编辑
这是我的想法的一个例子:

public class Dummy extends Thread {
private volatile Connection conn = null;
@Override
public void run() {
    try {
        this.conn = DriverManager.getConnection("foobar") ;
    } catch (sqlException e) {
        e.printstacktrace();
    }
}
static public Connection getConnection() {
    Dummy d = new Dummy() ;
    d.start() ;
    try {
        Thread.sleep(2000) ;
    } catch (InterruptedException e) {}
    return d.conn ;
}
}

然后,您可以在代码中的其他位置调用静态Dummy.getConnection()方法.一个缺点是这种方法总是花费2秒,但是当线程完成时将其更改为立即返回并不太难.

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...