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. }  

相关推荐