有关C3P0汇集数据源的问题

Ume*_*yat 5 java hibernate c3p0

我尝试使用池化数据源来记录有关数据库连接池的信息,即最大池大小,当前号.正在使用的连接,繁忙的连接等.我使用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) {
    }
Run Code Online (Sandbox Code Playgroud)

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

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

我想知道,如果它是一个正确的方法来实现我的目标?
另外,我对dataSource.getNumConnectionsAllUsers() 和其他函数(我正在使用)的确切返回有什么困惑.javadoc中没有可用的描述.

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

环境:Java,Hibernate,C3P0,MySQL

swa*_*liu 3

尝试阅读 PooledDataSource java doc。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 ) 创建的池,第三个变体提供聚合信息或对所有池执行操作。