0

我正在使用proxool java 连接池(版本 0.9.1)。一切正常,直到我达到最大连接数。如果达到最大连接数 proxool 立即抛出SQLExcepion

java.sql.SQLException: Couldn't get connection because we are at maximum 
connection count (n/n) and there are none available

当然,n显示的不是最大连接数。

为什么 proxoolSQLException立即抛出而不是等待可用连接?当然不是永远,但可配置的超时会很棒。

我不知道它是否重要,但我在 Tomcat J2EE 应用程序中使用 proxool。proxool 的参数在中定义,context.xml我正在使用Proxool DataSource Support

4

3 回答 3

2

我在 proxool 邮件列表上问这个问题,我得到了一个快速但不幸的是否定的答案

现在不支持可配置(或任何类型的)超时,但是有计划实现此功能。

于 2009-03-06T14:58:22.777 回答
1

我快速查看了源代码,这看起来像是 ConnectionPool.getConnection 的标准行为。文档说同样的话。

还有其他数据库池库(例如 Apache DBCP 和 C3P0),但您必须进行一些重构才能使用它们。另一种方法是自己包装 getConnection 方法(或修改 proxool 源)并使其按您想要的方式工作。

于 2009-03-04T20:10:28.363 回答
0

您可以使用 Thread.sleep() 来处理它。达到最大连接数时,Proxool 会引发异常。一旦你检测到它,你可以通过调用“Thread.sleep()”等待一段时间,希望在这段时间之后,连接将再次可用。

公共连接 getConnection() 抛出 SQLException {
    连接 conn = null;
    而 (conn ==null){
      尝试 {
        conn = DriverManager.getConnection("proxool."+connectionPoolAlias);
      } 捕捉(SQLException e){
        e.printStackTrace();
        字符串方法名 =e.getStackTrace()[0].getMethodName();
        if (methodName.equalsIgnoreCase("checkSimultaneousBuildThrottle") ||
                                     methodName.equalsIgnoreCase("quickRefuse")){
          尝试{
            线程.sleep(500);
          }catch(InterruptedException 即){}
        }别的{
          扔 e;
        }
      }
    }
    返回连接;
  }
于 2009-05-27T09:45:06.627 回答