我正在使用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 ...
}
干杯
答案 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 ...
}