我尝试使用池化数据源来记录有关数据库连接池的信息,即最大池大小、当前编号。正在使用的连接、繁忙的连接等。我正在使用 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
最佳答案
尝试阅读 PooledDataSource java 文档。 http://www.mchange.com/projects/c3p0/apidocs/com/mchange/v2/c3p0/PooledDataSource.html
PooledDataSource.getXXXXUser() 是监控和管理数据源的正确方式
此界面中的功能只有在
出于管理原因,您喜欢密切跟踪 您的应用程序正在使用的所有连接的数量和状态;
解决在管理 DataSource 时遇到的问题,该 DataSource 的客户端是编码不当的应用程序,会泄漏连接,但您无权修复这些问题;
- 解决底层 jdbc 驱动程序/DBMS 系统不可靠时可能出现的问题。 .
还有在javadoc中有关于方法名的描述。
请参阅方法名称 ... 部分
此接口(interface)中的许多方法具有三种变体:
- <方法名> DefaultUser()
- <方法名>(字符串用户名,字符串密码)
- <方法名>AllUsers()
第一个变体使用为默认用户维护的池——通过调用无参数 getConnection() 创建的连接,第二个变体让您跟踪通过调用 getConnection(username, password) 创建的池,以及第三种变体提供聚合信息或对所有池执行操作。
关于java - 关于 C3P0 合并数据源的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7524420/