我有一个应用程序将与 MySQL 建立数据库连接并执行查询。有时,DriverManager.getConnection()
方法调用需要2秒,有时需要30秒。有没有办法控制这个方法2秒后超时?
DriverManager.setLoginTimeout()
似乎不起作用。
实际上,我可以设置超时statement.executeQuery()
通过让线程休眠我的超时值并在唤醒后关闭连接。但它是连接建立部分,我无法真正设置超时。
将不胜感激任何帮助。
如果没有其他选项,您始终可以在单独的线程中执行该调用,如果该调用在 2 秒内未完成,则中止/忽略该调用。
EDIT这是我的想法的一个例子:
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 秒,但是将其更改为在线程完成时立即返回并不太难。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)