C3P0的监控

来源:互联网 发布:蜂窝网络是什么 编辑:程序博客网 时间:2024/06/05 21:15

C3P0的监控

    博客分类: 
  • JAVA
JVMJDBC 
C3P0作为数据库连接池的解决方案,被应用的很广泛。他对连接池监控也提供了接口。 

你只需要获取要监控的datasource,就能通过c3p0提供的 com.mchange.v2.c3p0.PooledDataSource接口实现类来完成状态的查询。 

官方的doc中提供了如何获取状态的例子代码: 

   1. DataSource ds = (DataSource) ictx.lookup( "java:comp/env/jdbc/myDataSource" );  
   2.  // make sure it's a c3p0 PooledDataSource   
   3. if ( ds instanceof PooledDataSource) {   
   4. PooledDataSource pds = (PooledDataSource) ds; System.err.println("num_connections: " + pds.getNumConnectionsDefaultUser());   
   5. System.err.println("num_busy_connections: " + pds.getNumBusyConnectionsDefaultUser()); System.err.println("num_idle_connections: " + pds.getNumIdleConnectionsDefaultUser()); System.err.println(); } else System.err.println("Not a c3p0 PooledDataSource!");  


从上边的代码中可以看出,只要获取了系统的datasource应用就可以知道当前连接池的状态了。 

对于单个数据源的系统来说,这种方式显然是很奏效的。 

但是同时我们可能面临在一个JVM上有多个C3P0数据库连接池。这个时候我们该如何处理呢?如果我们只是统计整体的一个状态,那也无需担心,但是如果我们需要对每个创建的连接池进行统计,那么就需要我们给每个C3P0连接池打上记号了。这里官方文档说可以给每个datasouce指定 dataSourceName,将来根据dataSourceName来指定我们到底要查询的是哪个数据库连接池的状态。详细参见“Using C3P0Registry to get a reference to a DataSource”,这里反复强调了各个连接池的唯一性可以通过dataSourceName来标记。 

  我们在编码上记住,通过指定唯一性标记来完成对C3P0连接池的辨认。以此来完成C3P0多数据源的状态统计
0 0
原创粉丝点击