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

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 这是因为服务器无法处理如此多的连接。我无法更改数据库服务器上的任何内容。所以我的问题是:在我真正连接

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

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
      }