Java Web中使用數據庫連接池proxool配置詳解

使用proxool數據庫連接池步驟:

在WEB-INF的lib中導入proxool-0.9.0RC3.jar 
在WEB-INF中新建一個XML文件,取名爲proxool.xml 
在proxool.xml中的內容如下:

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!--  
  3. the proxool configuration can be embedded within your own application's. Anything outside the "proxool"   
  4.   
  5. tag is ignored.  
  6. -->  
  7. <something-else-entirely>  
  8.      <proxool>  
  9.                 <alias>smms</alias> <!--數據源的別名-->  
  10.                 <driver-url>jdbc:mysql://127.0.0.1:3306/smms</driver-url><!--url連接串-->  
  11.                 <driver-class>com.mysql.jdbc.Driver</driver-class><!--驅動類-->  
  12.                 <driver-properties>  
  13.                         <property name="user" value="root" /><!--用戶名-->  
  14.                         <property name="password" value="root" /><!--密碼-->  
  15.                 </driver-properties>           
  16.                 <!--最大連接數(默認 5個),超過了這個連接數,再有請求時,就排在隊列中等候,最大的等待請求數由  
  17.   
  18. maximum-new-connections決定-->  
  19.                 <maximum-connection-count>100</maximum-connection-count>  
  20.                 <!--最小連接數(默認2個)-->  
  21.                 <minimum-connection-count>10</minimum-connection-count>  
  22.                 <!--proxool自動偵察各個連接狀態的時間間隔(毫秒),偵察到空閒的連接就馬上回收,超時的銷燬  默  
  23.   
  24. 認30秒-->  
  25.                 <house-keeping-sleep-time>90000</house-keeping-sleep-time>  
  26.                 <!--沒有空閒連接可以分配而在隊列中等候的最大請求數,超過這個請求數的用戶連接就不會被接受-  
  27.   
  28. ->  
  29.                 <maximum-new-connections>10</maximum-new-connections>  
  30.                 <!--最少保持的空閒連接數(默認2個)-->  
  31.                 <prototype-count>5</prototype-count>  
  32.                 <!--在使用之前測試-->  
  33.                 <test-before-use>true</test-before-use>  
  34.                 <!--用於保持連接的測試語句  -->  
  35.                 <house-keeping-test-sql>select id from t_sysadmin</house-keeping-test-sql>  
  36.      </proxool>  
  37. </something-else-entirely>  

在web.xml中添加以下節點:

  1. <servlet>       
  2.  <servlet-name>ServletConfigurator</servlet-name>       
  3.  <servlet-class>       
  4.    org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class>       
  5.  <init-param>       
  6.    <param-name>xmlFile</param-name>       
  7.    <param-value>WEB-INF/proxool.xml</param-value>       
  8.  </init-param>       
  9.  <load-on-startup>1</load-on-startup>       
  10. t;/servlet>  

數據庫操作類如下:

  1. package cn.edu.hbcit.smms.dao.databasedao;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.DriverManager;  
  5. import java.sql.PreparedStatement;  
  6. import java.sql.ResultSet;  
  7. import java.sql.SQLException;  
  8.   
  9. import org.apache.log4j.Logger;  
  10.   
  11. import org.logicalcobwebs.proxool.ProxoolException;         
  12. import org.logicalcobwebs.proxool.ProxoolFacade;         
  13. import org.logicalcobwebs.proxool.admin.SnapshotIF;  
  14. /** 
  15.  * 數據庫操作類 
  16.  * @author lw 
  17.  * 
  18.  */  
  19. public class DBConn {  
  20.     private static Connection conn;  
  21.     private static ResultSet rs;  
  22.     private static PreparedStatement ps;  
  23.     private static String driverClass = "org.logicalcobwebs.proxool.ProxoolDriver";//proxool驅動類   
  24.     //private static String url = "jdbc:mysql://localhost:3306/bbs?user=root&password=123";   
  25.     private static int activeCount = 0//活動連接數   
  26.     protected final Logger log = Logger.getLogger(DBConn.class.getName());  
  27.       
  28.     /** 
  29.      * 獲取數據庫連接 
  30.      * @return Connection 
  31.      */  
  32.     public Connection getConn() {  
  33.         try {  
  34.             Class.forName(driverClass);   
  35.             conn = DriverManager.getConnection("proxool.smms"); //此處的smms是在proxool.xml中配置的連接池別名   
  36.             this.showSnapshotInfo(); //查看連接池信息   
  37.         } catch (Exception e) {  
  38.             log.error(e.getMessage());  
  39.             log.debug("數據庫連接錯誤!");  
  40.             //System.out.println(e.getMessage());   
  41.             //System.out.println("數據庫連接錯誤!");   
  42.         }  
  43.         return conn;  
  44.     }  
  45.       
  46.     /**      
  47.      * 釋放連接      
  48.      * freeConnection      
  49.      * @param conn      
  50.      */  
  51.     public void freeConnection(Connection conn){  
  52.         if(conn!=null){  
  53.             try {  
  54.                 conn.close();  
  55.             } catch (SQLException e) {  
  56.                 e.printStackTrace();  
  57.             }  
  58.         }  
  59.     }  
  60.       
  61.   
  62.     /** 
  63.      * 獲取連接池中的連接信息 
  64.      */  
  65.     private void showSnapshotInfo(){  
  66.         try{         
  67.             SnapshotIF snapshot = ProxoolFacade.getSnapshot("smms"true);         
  68.             int curActiveCount=snapshot.getActiveConnectionCount();//獲得活動連接數          
  69.             int availableCount=snapshot.getAvailableConnectionCount();//獲得可得到的連接數          
  70.             int maxCount=snapshot.getMaximumConnectionCount() ;//獲得總連接數          
  71.             if(curActiveCount!=activeCount)//當活動連接數變化時輸出的信息          
  72.             {  
  73.                 log.debug("活動連接數:"+curActiveCount+"(active);可得到的連接數:"+availableCount+"(available);總連接數:"+maxCount+"(max)");  
  74.              //System.out.println("活動連接數:"+curActiveCount+"(active);可得到的連接數:"+availableCount+"(available);總連接數:"+maxCount+"(max)");                       
  75.              activeCount=curActiveCount;         
  76.             }  
  77.         }catch(ProxoolException e){         
  78.             e.printStackTrace();         
  79.         }         
  80.     }    
  81.   
  82. }  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章