MySQL与Java:仅在可能的情况下打开连接
我使用Connector/J5.1.14在集群上运行一个数据库密集型Java应用程序。因此,我有多达150个并发任务访问同一个MySQL数据库。我得到以下错误:MySQL与Java:仅在可能的情况下打开连接,java,mysql,jdbc,connection,Java,Mysql,Jdbc,Connection,我使用Connector/J5.1.14在集群上运行一个数据库密集型Java应用程序。因此,我有多达150个并发任务访问同一个MySQL数据库。我得到以下错误: Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Too many connections 这是因为服务器无法处理如此多的连接。我无法更改数据库服务器上的任何内容。所以我的问题是:在我真正连接
Exception in thread "main" com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Too many connections
这是因为服务器无法处理如此多的连接。我无法更改数据库服务器上的任何内容。所以我的问题是:在我真正连接到数据库之前,我能检查一下连接是否可行吗
类似这样的代码(伪代码):
干杯像这样的东西应该更有效
try
{
Connection cn = DriverManager.getConnection(url, username, password);
}
catch ( com.mysql.jdbc.exceptions.MySQLNonTransientConnection e )
{
// wait ...
}
像这样的东西应该更有效
try
{
Connection cn = DriverManager.getConnection(url, username, password);
}
catch ( com.mysql.jdbc.exceptions.MySQLNonTransientConnection e )
{
// wait ...
}
另请参见:
- 使用连接池,例如。一个体面的连接池可以等待一个特定的超时,然后重试一定的次数,直到一个连接可用,然后返回它。还要确保在获取连接的每个
try
块的finally
中调用Connection#close()
。否则,连接将永远不会释放到池(或在不使用池时释放到数据库),并且无论如何都会耗尽连接。使用连接池,例如。一个体面的连接池可以等待一个特定的超时,然后重试一定的次数,直到一个连接可用,然后返回它。还要确保在获取连接的每个try
块的finally
中调用Connection#close()
。否则,连接将永远不会释放到池(或在不使用池时释放到数据库),并且无论如何都会耗尽连接。正是我所寻找的,我将其嵌入了while循环中。谢谢。正是我想要的,我把它嵌入了一个while循环中。谢谢。谢谢你的建议,我不知道。我所有的连接都关闭了,这是群集的事情。谢谢你的建议,我不知道。我所有的连接都关闭了,这是一个集群问题。
try{
//try to connect
}catch(com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException ex) {
//what ever you want to do
}