【问题标题】:MySQL with Java: Open connection only if possible使用 Java 的 MySQL:仅在可能的情况下打开连接
【发布时间】:2011-06-07 08:12:00
【问题描述】:

我正在使用 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 ...
}

干杯

【问题讨论】:

    标签: java mysql jdbc connection


    【解决方案1】:

    使用连接池,例如C3P0。有点像样的连接池可以等待一定的超时,然后重试一定的次数,直到有连接可用,然后返回。还要确保在获取连接的每个tryfinally 块中调用Connection#close()。否则,连接永远不会释放到池中(或者当您不使用池时,连接不会释放到数据库),并且无论如何您都会用完它们。

    【讨论】:

    • 感谢建议,我不知道C3P0。我所有的连接都关闭了,这是一个集群问题。
    【解决方案2】:
    try{
        //try to connect
    }catch(com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException ex) {
        //what ever you want to do
    }
    

    另见:

    【讨论】:

    • 正是我想要的,我将它嵌入到一个while循环中。谢谢。
    【解决方案3】:

    类似的东西应该会更好。

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

    【讨论】:

      猜你喜欢
      • 2021-05-15
      • 1970-01-01
      • 1970-01-01
      • 2012-12-17
      • 1970-01-01
      • 2020-07-29
      • 2020-03-02
      • 2017-11-18
      • 2012-08-22
      相关资源
      最近更新 更多