带Java的MySQL:仅在可能的情况下打开连接

时间:2011-01-11 17:46:33

标签: java mysql jdbc connection

我正在使用Connector / J 5.1.14在群集上运行数据库密集型Java应用程序。因此,我有多达150个并发任务访问同一个MySQL数据库。我收到以下错误:

Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Too many connections

这是因为服务器无法处理这么多连接。我无法更改数据库服务器上的任何内容。所以我的问题是:在实际连接数据库之前,我可以检查连接是否可行吗?

像这样(伪代码):

check database for open connection slots
if (slot is free) {
    Connection cn = DriverManager.getConnection(url, username, password);
}
else {
    wait ...
}

干杯

3 个答案:

答案 0 :(得分:3)

try{
    //try to connect
}catch(com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException ex) {
    //what ever you want to do
}

另见:

答案 1 :(得分:1)

使用连接池,例如C3P0。一个不错的连接池可以等待一定的超时并重试一定次数,直到连接可用,然后返回它。同时确保在获得连接的每个Connection#close()的{​​{1}}块中调用finally。否则,连接永远不会释放到池中(或者当您不使用池时也不会释放到数据库中),并且无论如何都将耗尽它们。

答案 2 :(得分:0)

应该做得更好。

try 
{
    Connection cn = DriverManager.getConnection(url, username, password);
} 
catch ( com.mysql.jdbc.exceptions.MySQLNonTransientConnection e ) 
{
    // wait ...
}