C3P0的監控

C3P0的監控

博客分類:  JAVA
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多數據源的狀態統計
發佈了16 篇原創文章 · 獲贊 7 · 訪問量 17萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章