proxool数据连接池总结

来源:互联网 发布:网络机顶盒连网显示灯 编辑:程序博客网 时间:2024/06/05 07:01
数据库连接池总结----Proxool 

1、所需jar包: proxool-0.9.1.jar 和 proxool-cglib.jar 
下载地址: http://sourceforge.net/projects/proxool/ 

2、通过 ProxoolDriver 取得 connection 
Java代码  收藏代码
  1. public Connection getConnectThrowProxoolDriver () {  
  2.     Connection connection =  null ;   
  3.     try  {   
  4.         Class.forName( "org.logicalcobwebs.proxool.ProxoolDriver" );   
  5.         connection = DriverManager.getConnection(   
  6.         "proxool.test:org.gjt.mm.mysql.Driver:jdbc:mysql://localhost:3306/test" ,   
  7.         "root" ,   
  8.         "1234"   
  9.         );   
  10.     }  catch  (Exception e) {   
  11.         System.out.println(e);  
  12.     }   
  13.     return connection;  
  14. }  


3、使用 properties 或者 xml 来设置 DB URL 及 Driver 
可以采用 xml 配置文件, 在程序中使用 JAXPConfigurator.configure("proxool.xml", false); 配置文件设置如下 
Xml代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>    
  2.     <!--     
  3.         the proxool configuration can be embedded within your own     
  4.         application's. Anything outside the "proxool" tag is ignored.     
  5.     -->    
  6. <something-else-entirely>    
  7.     <proxool>    
  8.         <alias>dbname</alias> <!--数据源的别名-->    
  9.         <driver-url>jdbc:mysql://localhost:3306/test</driver-url><!--url连接串-->    
  10.         <driver-class>org.gjt.mm.mysql.Driver</driver-class> <!--驱动类-->    
  11.         <driver-properties>    
  12.             <property name="user" value="root" /> <!--用户名-->    
  13.             <property name="password" value="1234" /><!--密码-->    
  14.         </driver-properties>      
  15.         <!--最大连接数(默认5个),超过了这个连接数,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new-connections决定 -->    
  16.         <maximum-connection-count>100</maximum-connection-count>      
  17.         <!--最小连接数(默认2个)-->    
  18.         <minimum-connection-count>10</minimum-connection-count>      
  19.         <!--proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁 默认30秒-->    
  20.         <house-keeping-sleep-time>90000</house-keeping-sleep-time>    
  21.         <!--没有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受-->    
  22.         <maximum-new-connections>10</maximum-new-connections>      
  23.         <!--最少保持的空闲连接数(默认2个)-->    
  24.         <prototype-count>5</prototype-count>      
  25.         <!--在使用之前测试-->    
  26.         <test-before-use>true</test-before-use>    
  27.         <!--用于保持连接的测试语句 -->    
  28.         <house-keeping-test-sql>select name from test</house-keeping-test-sql>    
  29.     </proxool>    
  30. </something-else-entirely>  


也可以采用 properties, 在程序 PropertyConfigurator.configure("proxool.properties"); 文件设置如下: 
WEB-INF/proxool.properties 
    jdbc-0.proxool.alias=property-test 
    jdbc-0.proxool.driver-url=jdbc:mysql://localhost:3306/test 
    jdbc-0.proxool.driver-class=org.gjt.mm.mysql.Driver 
    jdbc-0.user=root 
    jdbc-0.password=password 
    jdbc-0.proxool.maximum-connection-count=10 
    jdbc-0.proxool.house-keeping-test-sql=select CURRENT_DATE 


可以直接在Java程式中使用java.util.Properties设定 
Java代码  收藏代码
  1. Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");  
  2. Properties info = new Properties();  
  3. info.setProperty("proxool.maximum-connection-count""20");  
  4. info.setProperty("proxool.house-keeping-test-sql""select CURRENT_DATE");  
  5. info.setProperty("user""root");  
  6. info.setProperty("password""1234");  
  7. Connection conn = DriverManager.getConnection("proxool.example:com.mysql.jdbc.Driver:jdbc:mysql://localhost:3306/test", info);  



4、如果在 Web 使用, 在 web.xml 也可以设置 ServletConfigurator Servlet 来注册 

web.xml文件配置如下: 
Xml代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app id="WebApp_ID" version="2.4"  
  3.     xmlns="http://java.sun.com/xml/ns/j2ee"  
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">  
  6.     <servlet>  
  7.         <servlet-name>ServletConfigurator</servlet-name>  
  8.         <servlet-class>  
  9.             org.logicalcobwebs.proxool.configuration.ServletConfigurator  
  10.         </servlet-class>  
  11.         <init-param>  
  12.             <param-name>xmlFile</param-name>  
  13.             <param-value>WEB-INF/proxool.xml</param-value>  
  14.         </init-param>  
  15.         <load-on-startup>1</load-on-startup>  
  16.     </servlet>  
  17.     <!--   
  18.         配置连接池的监视路径  
  19.         检视 pooling 现在状态   
  20.     -->  
  21.     <servlet>  
  22.         <servlet-name>Admin</servlet-name>  
  23.         <servlet-class>  
  24.             org.logicalcobwebs.proxool.admin.servlet.AdminServlet  
  25.         </servlet-class>  
  26.     </servlet>  
  27.     <servlet-mapping>  
  28.         <servlet-name>Admin</servlet-name>  
  29.         <url-pattern>/admin</url-pattern>  
  30.     </servlet-mapping>  
  31.     <!--   
  32.     配置受保护域,只有Tomcat管理员才能察看连接池的信息   
  33.     <security-constraint>  
  34.         <web-resource-collection>  
  35.             <web-resource-name>proxool</web-resource-name>  
  36.             <url-pattern>/admin</url-pattern>  
  37.         </web-resource-collection>  
  38.         <auth-constraint>  
  39.             <role-name>manager</role-name>  
  40.         </auth-constraint>  
  41.     </security-constraint>  
  42.     <login-config>  
  43.         <auth-method>BASIC</auth-method>  
  44.         <realm-name>proxool manager Application</realm-name>  
  45.     </login-config>  
  46.     <security-role>  
  47.         <description>  
  48.             The role that is required to log in to the Manager  
  49.             Application  
  50.         </description>  
  51.         <role-name>manager</role-name>  
  52.     </security-role>  
  53.     <error-page>  
  54.         <error-code>401</error-code>  
  55.         <location>/401.jsp</location>  
  56.     </error-page>  
  57.     -->  
  58. </web-app>  


获取Connection的程序代码如下: 
Java代码  收藏代码
  1. public Connection getConnect() {  
  2.         Connection conn = null;  
  3.         try {  
  4.             conn = DriverManager.getConnection("proxool.dbname");  
  5.         } catch (SQLException e) {  
  6.             e.printStackTrace();  
  7.         }  
  8.         return conn;  
  9.     }  



贴上自己的测试类: 
Java代码  收藏代码
  1. package com.royzhou.db;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.DriverManager;  
  5. import java.sql.SQLException;  
  6. import java.util.Properties;  
  7.   
  8. import org.logicalcobwebs.proxool.ProxoolException;  
  9. import org.logicalcobwebs.proxool.configuration.JAXPConfigurator;  
  10.   
  11. public class DBUtil {  
  12.       
  13.     public Connection getConnectThrowProxoolDriver () {  
  14.         Connection connection =  null ;   
  15.         try  {   
  16.             Class.forName( "org.logicalcobwebs.proxool.ProxoolDriver" );   
  17.             connection = DriverManager.getConnection(   
  18.             "proxool.test:org.gjt.mm.mysql.Driver:jdbc:mysql://localhost:3306/test" ,   
  19.             "root" ,   
  20.             "1234"   
  21.             );   
  22.         }  catch  (Exception e) {   
  23.             System.out.println(e);  
  24.         }   
  25.         return connection;  
  26.     }  
  27.       
  28.     /** 
  29.      * 通过XML配置文件读取配置 
  30.      * @return 
  31.      */  
  32.     public Connection getConnectThrowXMLConfig() {  
  33.         Connection connection =  null ;   
  34.         try {  
  35.             Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");  
  36.             /** 
  37.              * 需要使用绝对路径来设置, 
  38.              * 因为proxool源代码没有做判断, 
  39.              * 如果使用相对路径结果会报FileN 
  40.              * otFoundException 
  41.              */  
  42.             JAXPConfigurator.configure("F:\\workspace\\proxool\\proxool\\WEB-INF\\proxool.xml"false); // false 表示不验证   
  43.             connection = DriverManager.getConnection("proxool.test"); //proxool.test这里的test必须与配置文件配置的别名相同  
  44.         } catch (ClassNotFoundException e) {  
  45.             e.printStackTrace();  
  46.         } catch (ProxoolException e) {  
  47.             e.printStackTrace();  
  48.         } catch (SQLException e) {  
  49.             e.printStackTrace();  
  50.         }  
  51.         return connection;  
  52.     }  
  53.       
  54.     /** 
  55.      * 通过properties配置文件读取配置 
  56.      * @return 
  57.      */  
  58.     public Connection getConnectThrowPropConfig() {  
  59.         Connection connection =  null ;   
  60.         try {  
  61.             Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");  
  62.             /** 
  63.              * 需要使用绝对路径来设置, 
  64.              * 因为proxool源代码没有做判断, 
  65.              * 如果使用相对路径结果会报FileN 
  66.              * otFoundException 
  67.              */  
  68.             org.logicalcobwebs.proxool.configuration.PropertyConfigurator.configure("F:\\workspace\\proxool\\proxool\\WEB-INF\\proxool.properties");  
  69.             connection = DriverManager.getConnection("proxool.test"); //proxool.test这里的test必须与配置文件配置的别名相同  
  70.         } catch (ClassNotFoundException e) {  
  71.             e.printStackTrace();  
  72.         } catch (ProxoolException e) {  
  73.             e.printStackTrace();  
  74.         } catch (SQLException e) {  
  75.             e.printStackTrace();  
  76.         }  
  77.         return connection;  
  78.     }  
  79.       
  80.     /** 
  81.      * 直接在代码中设置props 
  82.      * @return 
  83.      */  
  84.     public Connection getConnectThrowProp() {  
  85.         Connection conn = null;  
  86.         Properties info = new Properties();  
  87.         info.setProperty("proxool.alias""test");  
  88.         info.setProperty("proxool.maximum-connection-count""20");  
  89.         info.setProperty("proxool.house-keeping-test-sql""select CURRENT_DATE");  
  90.         info.setProperty("user""root");  
  91.         info.setProperty("password""1234");  
  92.         try {  
  93.             Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");  
  94.             conn = DriverManager.getConnection("proxool.test:com.mysql.jdbc.Driver:jdbc:mysql://localhost:3306/test", info);  
  95.         } catch (ClassNotFoundException e) {  
  96.             e.printStackTrace();  
  97.         } catch (SQLException e) {  
  98.             e.printStackTrace();  
  99.         }  
  100.         return conn;  
  101.     }  
  102.       
  103.     /** 
  104.      * WEB应用 
  105.      * Class.forName("org.logicalcobwebs.proxool.ProxoolDriver"); 
  106.      * JAXPConfigurator.configure("WEB-INF/proxool.xml",false); 
  107.      * Connection conn = DriverManager.getConnection("proxool.dbname"); 
  108.      * 报FileNotFoundException,找不到原因 
  109.      * 所以使用ServletConfigurator,查看proxool源代码发现 
  110.      * ServletConfigurator加载配置文件的时候做了判断 
  111.      * String appDir = servletConfig.getServletContext().getRealPath("/"); 
  112.      * File file = new File(value); 
  113.      * if (file.isAbsolute()) { 
  114.      *    JAXPConfigurator.configure(value, false); 
  115.      * } else { 
  116.      *    JAXPConfigurator.configure(appDir + File.separator + value, false); 
  117.      * } 
  118.      * @return 
  119.      */  
  120.     public Connection getConnectThrowWeb() {  
  121.         Connection conn = null;  
  122.         try {  
  123.             conn = DriverManager.getConnection("proxool.dbname");  
  124.         } catch (SQLException e) {  
  125.             e.printStackTrace();  
  126.         }  
  127.         return conn;  
  128.     }  
  129.       
  130.     public static void main(String[] args) {  
  131.         System.out.println(new DBUtil().getConnectThrowXMLConfig());  
  132.     }  
  133. }  



以上代码仅供测试使用,实际开发中Connection使用完成之后都必须做相应的关闭操作。。

转自:http://royzhou1985.iteye.com/blog/423519