【问题标题】:Proxool maximum connection countProxool 最大连接数
【发布时间】:2009-03-03 10:25:44
【问题描述】:

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

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

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

【问题讨论】:

    标签: java connection-pooling proxool


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        您可以使用 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; } } } 返回连接; }

        【讨论】:

          猜你喜欢
          • 2013-04-20
          • 2012-01-16
          • 2015-06-04
          • 2012-11-07
          • 2014-02-14
          • 2014-06-26
          • 1970-01-01
          • 1970-01-01
          • 2014-12-20
          相关资源
          最近更新 更多