proxool连接池配置详细说明

来源:百度文库 编辑:神马文学网 时间:2024/04/28 00:04:59
      1、下载相关资源。

      从http://proxool.sourceforge.net/站点上下载我们需要的资源,proxool-0.9.1是最新版本,解压后从lib下copy里面的2个JAR包 proxool-0.9.1.jar和 

proxool-cglib.jar至项目中去。如果不加proxool-cglib.jar的话会报 java.lang.ClassNotFoundException:org.logicalcobwebs.cglib.proxy.Callback异常。 

      2、首先在WEB-INF目录下新建一个proxool.xml文件。

Java代码
  1. "1.0" encoding="UTF-8"?>   
  2.   
  3.        
  4.         datasource1   
  5.         jdbc:mysql://localhost:3306/datasource1   
  6.         class>com.mysql.jdbc.Driverclass>   
  7.            
  8.             "user" value="root" />   
  9.             "password" value="root" />   
  10.            
  11.         90000   
  12.         new-connections>20new-connections>   
  13.         5   
  14.         1000   
  15.         10   
  16.        
  17.        
  18.        
  19.         datasource2   
  20.         jdbc:sybase:Tds:localhost:16428/datasource2   
  21.         class>com.sybase.jdbc3.jdbc.SybDriverclass>   
  22.            
  23.             "user" value="dba" />   
  24.             "password" value="dba" />   
  25.            
  26.         90000   
  27.         new-connections>20new-connections>   
  28.         5   
  29.         1000   
  30.         10   
  31.        
  32.   

           我在里面配置了2个不同数据库的数据源,你可以根据需要配置多个,其中具体的参数属性我会在下面全部予以说明。
      3、配置web.xml文件。

Java代码
  1. "1.0" encoding="UTF-8" ?>   
  2. "2.5" xmlns="http://java.sun.com/xml/ns/javaee"  
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  4.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">   
  5.        
  6.         ServletConfigurator   
  7.         class>   
  8.             org.logicalcobwebs.proxool.configuration.ServletConfigurator   
  9.         class>   
  10.            
  11.             xmlFile   
  12.             WEB-INF/proxool.xml   
  13.            
  14.         1   
  15.        
  16.        
  17.         datasource_situation   
  18.         class>   
  19.             org.logicalcobwebs.proxool.admin.servlet.AdminServlet   
  20.         class>   
  21.        
  22.        
  23.         datasource_situation   
  24.         /datasource_situation   
  25.        
  26.        
  27.        
  28.            
  29.             proxool   
  30.             /datasource_situation   
  31.            
  32.            
  33.             manager   
  34.            
  35.        
  36.        
  37.         BASIC   
  38.         proxool manager Application   
  39.        
  40.        
  41.            
  42.             The role that is required to log in to the Manager   
  43.             Application   
  44.            
  45.         manager   
  46.        
  47.        
  48.         401   
  49.         /401.jsp   
  50.        
  51.   

           1用来设置加载属性,一定要保证在其他配置项之前加载。

Java代码
  1.   
  2.     datasource_situation   
  3.     class>   
  4.         org.logicalcobwebs.proxool.admin.servlet.AdminServlet   
  5.     class>   
  6.   
  7.   
  8.     datasource_situation   
  9.     /datasource_situation   
  10.   

            这个属性是用来提供察看连接池信息的工具,既在域名后跟上/datasource_situation就可以查看了,当然名字可以自己定义。如果你想限制用户和密码来访问就用

Java代码
  1.   
  2.            
  3.             proxool   
  4.             /datasource_situation   
  5.            
  6.            
  7.             manager   
  8.            
  9.        
  10.        
  11.         BASIC   
  12.         proxool manager Application   
  13.        
  14.        
  15.            
  16.             The role that is required to log in to the Manager   
  17.             Application   
  18.            
  19.         manager   
  20.        
  21.        
  22.         401   
  23.         /401.jsp   
  24.       

           这段配置就限定了只有输入了TOMCAT的管理员帐号密码后就能登陆连接池查看工具了,如果连续三次登陆失败,进入401.jsp页面。401.jsp要加入下段代码

           response.setHeader("WWW-Authenticate", "Basic realm=\"Tomcat Manager Application\"");

      4、配置连接池连接类。

Java代码
  1. package selfservice;           
  2.           
  3. import java.sql.Connection;           
  4. import java.sql.DriverManager;           
  5. import java.sql.ResultSet;           
  6. import java.sql.SQLException;           
  7. import java.sql.Statement;           
  8.           
  9. import org.logicalcobwebs.proxool.ProxoolException;           
  10. import org.logicalcobwebs.proxool.ProxoolFacade;           
  11. import org.logicalcobwebs.proxool.admin.SnapshotIF;           
  12.           
  13.           
  14. public class PoolManager {           
  15.                
  16.     private static int activeCount = 0;           
  17.                
  18.                
  19.     public PoolManager(){           
  20.                    
  21.     }              
  22.     /**        
  23.      * 获取连接        
  24.      * getConnection        
  25.      * @param name        
  26.      * @return        
  27.      */          
  28.     public Connection getConnection() {           
  29.         try{           
  30.             Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");//proxool驱动类           
  31.             Connection conn = DriverManager.getConnection("proxool.datasource1");        
  32.            //此处的datasource1是在proxool.xml中配置的连接池别名,当然根据需要可以用datasource2          
  33.             showSnapshotInfo();           
  34.                        
  35.             return conn;           
  36.         }catch(Exception ex){           
  37.             ex.printStackTrace();           
  38.         }           
  39.         return null;           
  40.     }           
  41.     /**        
  42.      * 此方法可以得到连接池的信息        
  43.      * showSnapshotInfo        
  44.      */          
  45.     private void showSnapshotInfo(){           
  46.         try{           
  47.             SnapshotIF snapshot = ProxoolFacade.getSnapshot("datasource1"true);           
  48.             int curActiveCount=snapshot.getActiveConnectionCount();//获得活动连接数           
  49.             int availableCount=snapshot.getAvailableConnectionCount();//获得可得到的连接数           
  50.             int maxCount=snapshot.getMaximumConnectionCount() ;//获得总连接数           
  51.             if(curActiveCount!=activeCount)//当活动连接数变化时输出的信息           
  52.             {           
  53.              System.out.println("活动连接数:"+curActiveCount+"(active)  可得到的连接数:"+availableCount+"(available)  总连接数:"+maxCount+"(max)");                        
  54.              activeCount=curActiveCount;           
  55.             }           
  56.         }catch(ProxoolException e){           
  57.             e.printStackTrace();           
  58.         }           
  59.     }           
  60.     /**        
  61.      * 获取连接        
  62.      * getConnection        
  63.      * @param name        
  64.      * @return        
  65.      */          
  66.     public Connection getConnection(String name){           
  67.         return getConnection();           
  68.     }           
  69.     /**        
  70.      * 释放连接        
  71.      * freeConnection        
  72.      * @param conn        
  73.      */          
  74.     public void freeConnection(Connection conn){           
  75.         if(conn!=null){           
  76.             try {           
  77.                 conn.close();           
  78.             } catch (SQLException e) {                         
  79.                 e.printStackTrace();           
  80.             }           
  81.         }           
  82.     }           
  83.     /**        
  84.      * 释放连接        
  85.      * freeConnection        
  86.      * @param name        
  87.      * @param con        
  88.      */          
  89.     public void freeConnection (String name,Connection con){           
  90.         freeConnection(con);           
  91.     }           
  92.                
  93.     public void getQuery() {                   
  94.         try {           
  95.             Connection conn = getConnection();           
  96.             if(conn != null){           
  97.                 Statement statement = conn.createStatement();           
  98.                 ResultSet rs = statement.executeQuery("select * from tblgxinterface");           
  99.                 int c = rs.getMetaData().getColumnCount();           
  100.                 while(rs.next()){                              
  101.                     System.out.println();           
  102.                     for(int i=1;i<=c;i++){           
  103.                         System.out.print(rs.getObject(i));           
  104.                     }           
  105.                 }           
  106.                 rs.close();           
  107.             }           
  108.             freeConnection(conn);           
  109.         } catch (SQLException e) {                     
  110.             e.printStackTrace();           
  111.         }           
  112.           
  113.     }           
  114.           
  115. }    

        测试成功!

        下面我来介绍一下proxool.xml文件中关于proxool各个属性的详细说明:

fatal-sql-exception: 它是一个逗号分割的信息片段.当一个SQL异常发生时,他的异常信息将与这个信息片段进行比较.如果在片段中存在,那么这个异常将被认为是个致命错误(Fatal SQL Exception ).这种情况下,数据库连接将要被放弃.无论发生什么,这个异常将会被重掷以提供给消费者.用户最好自己配置一个不同的异常来抛出.

 

fatal-sql-exception-wrapper-class:正如上面所说,你最好配置一个不同的异常来重掷.利用这个属性,用户可以包装SQLException,使他变成另外一个异常.这个异常或者继承SQLException或者继承字RuntimeException.proxool自带了2个实现:'org.logicalcobwebs.proxool.FatalSQLException' 和'org.logicalcobwebs.proxool.FatalRuntimeException' .后者更合适.

 

house-keeping-sleep-time: house keeper 保留线程处于睡眠状态的最长时间,house keeper 的职责就是检查各个连接的状态,并判断是否需要销毁或者创建.

 

house-keeping-test-sql:  如果发现了空闲的数据库连接.house keeper 将会用这个语句来测试.这个语句最好非常快的被执行.如果没有定义,测试过程将会被忽略。

 

injectable-connection-interface: 允许proxool实现被代理的connection对象的方法.

 

injectable-statement-interface: 允许proxool实现被代理的Statement 对象方法.

 

injectable-prepared-statement-interface: 允许proxool实现被代理的PreparedStatement 对象方法.

 

injectable-callable-statement-interface: 允许proxool实现被代理的CallableStatement 对象方法.

 

jmx:

 

jmx-agent-id:

 

jndi-name: 数据源的名称

 

maximum-active-time: 如果housekeeper 检测到某个线程的活动时间大于这个数值.它将会杀掉这个线程.所以确认一下你的服务器的带宽.然后定一个合适的值.默认是5分钟.

 

maximum-connection-count: 最大的数据库连接数.

 

maximum-connection-lifetime: 连接最大生命时间 默认4小时

 

minimum-connection-count: 最小的数据库连接数

 

overload-without-refusal-lifetime:

 

prototype-count: 连接池中可用的连接数量.如果当前的连接池中的连接少于这个数值.新的连接将被建立(假设没有超过最大可用数).例如.我们有3个活动连接2个可用连接,而我们的prototype-count是4,那么数据库连接池将试图建立另外2个连接.这和 minimum-connection-count不同. minimum-connection-count把活动的连接也计算在内.prototype-count 是spare connections 的数量.

 

recently-started-threshold:  略

 

simultaneous-build-throttle:  同时最大连接数

 

statistics:  连接池使用状况统计。 参数“10s,1m,1d”

 

statistics-log-level:  日志统计跟踪类型。 参数“ERROR”或 “INFO”

 

test-before-use:

 

test-after-use:

 

trace: 如果为true,那么每个被执行的SQL语句将会在执行期被log记录(DEBUG LEVEL).你也可以注册一个ConnectionListener (参看ProxoolFacade)得到这些信息.

 

verbose: 详细信息设置。 参数 bool 值