【问题标题】:Questions regarding C3P0 Pooled Data Source关于 C3P0 池化数据源的问题
【发布时间】:2011-09-23 04:57:11
【问题描述】:

我尝试使用池数据源来记录有关数据库连接池的信息,即最大池大小,当前编号。正在使用的连接数、繁忙的连接等。我正在使用C3P0Registry 来获取池化数据源。

PooledDataSource dataSource =null;
    try{
        C3P0Registry.getNumPooledDataSources();
        //I am sure that I am using only one data source
        Iterator<Set> connectionIterator = C3P0Registry.getPooledDataSources().iterator();
        dataSource = (PooledDataSource)connectionIterator.next();
    }catch (Exception e) {
    }

然后我将所需信息记录为:

Logger.write(LoggerConstant.DEBUG, " Connections in use: "+dataSource.getNumConnectionsAllUsers()+" , Busy Connections: "+dataSource.getNumBusyConnectionsAllUsers() +" , Idle Connections: "+ dataSource.getNumIdleConnectionsAllUsers()+" , Unclosed Orphaned Connections: "+ dataSource.getNumUnclosedOrphanedConnectionsAllUsers(), methodName);

我想知道这是否是实现我目标的正确方法?
另外,我对dataSource.getNumConnectionsAllUsers() 和其他功能(我正在使用)究竟返回什么感到困惑。 javadoc 中没有可用的描述。

是否有任何描述或在线教程,我可以从中了解有关这些特定功能的更多信息?

环境:Java、Hibernate、C3P0、MySQL

【问题讨论】:

  • +1 C3P0 documentation 很好,但在某些方面非常缺乏 javadocs。我经历了同样的情况,最终只是用报告方法来解决它。我很想看看是否有有用的答案。

标签: java hibernate c3p0


【解决方案1】:

尝试阅读 PooledDataSource java 文档。 http://www.mchange.com/projects/c3p0/apidocs/com/mchange/v2/c3p0/PooledDataSource.html

PooledDataSource.getXXXXUser() 是监控和管理数据源的正确方法

此界面中的功能只有在以下情况下才会有意义

  1. 出于管理原因,您希望密切跟踪 您的应用程序正在使用的所有连接的数量和状态;

  2. 解决在管理数据源时遇到的问题,该数据源的客户端是编码不良的应用程序,会泄漏连接,但您无权修复;

  3. 解决在底层 jdbc 驱动程序/DBMS 系统不可靠时可能出现的问题。 .

javadoc 中有关于方法名称的描述。

参见方法名称...部分

这个接口中的很多方法都有三种变体:

  1. DefaultUser()
  2. (字符串用户名,字符串密码)
  3. AllUsers()

第一个变体使用为默认用户维护的池——通过调用无参数 getConnection() 创建的连接,第二个变体允许您跟踪通过调用 getConnection(username, password) 创建的池,以及第三个变体提供聚合信息或对所有池执行操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-04
    • 2013-04-25
    • 1970-01-01
    • 2011-03-19
    • 1970-01-01
    • 2011-05-13
    • 2014-11-14
    相关资源
    最近更新 更多