`
jacklan
  • 浏览: 134384 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Proxool连接池实现.转

阅读更多



首先从 http://proxool.sourceforge.net/ 下载
proxool-0.9.0RC2.zip

解压后,把proxool-0.9.0RC2.jar放到工程的lib文件夹里面。
proxool是一个非常强大的连接池工具包,我觉得相比dbcp、c3p0这两个连接池包都要好用,我用loadrunner测试过,这三个连接池的从性能上排名如下:proxool>c3p0>dbcp,特别是dbcp在大并发的情况下总是出现各种异常。详细关于dbcp的介绍请参考 dbcp用户指南,dbcp实现参考tvjody.iteye.com/admin/show/117225。

下面是实现proxool的几种方式:

JDBC连接方法:

首先建一个proxool的配置文件proxool.xml
proxool.xml 代码
xml 代码

   1. <!--sp-->xml version="1.0" encoding="UTF-8"?>   
   2.  
   3. <!-- the proxool configuration can be embedded within your own application's. Anything outside the "proxool" tag is ignored. -->   
   4.  
   5. <something-else-entirely> 
   6.     <proxool> 
   7.         <!--连接池的别名--> 
   8.         <alias>DBPoolalias> 
   9.         <!--proxool只能管理由自己产生的连接--> 
  10.         <driver-url>jdbc:oracle:thin:@192.168.0.40:1521:drcomdriver-url> 
  11.         <!--JDBC驱动程序--> 
  12.         <driver-class>oracle.jdbc.driver.OracleDriverdriver-class> 
  13.         <driver-properties> 
  14.             <property name="user" value="drcom"/> 
  15.             <property name="password" value="drcom"/> 
  16.         driver-properties> 
  17.         <!-- proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁--> 
  18.         <house-keeping-sleep-time>90000house-keeping-sleep-time> 
  19.         <!-- 指因未有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受-->   
  20.         <maximum-new-connections>150maximum-new-connections> 
  21.         <!-- 最少保持的空闲连接数-->   
  22.         <prototype-count>3prototype-count> 
  23.         <!-- 允许最大连接数,超过了这个连接,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new-connections决定-->   
  24.         <maximum-connection-count>100maximum-connection-count> 
  25.         <!-- 最小连接数--> 
  26.         <minimum-connection-count>3minimum-connection-count> 
  27.     proxool> 
  28. something-else-entirely> 



再在web.xml中进行配置,其中的ServletConfigurator是装载WEB-INF目录下的proxool.xml,并设置为Tomcat启动时就加载。Admin这个Servlet是proxool提供的察看连接池的信息的工具,


web.xml 代码
xml 代码

   1. <!--sp-->xml version="1.0" encoding="UTF-8"?> 
   2. <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" 
   3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
   4.     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   
   5.     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 
   6.     <servlet> 
   7.         <servlet-name>ServletConfiguratorservlet-name> 
   8.         <servlet-class> 
   9.             org.logicalcobwebs.proxool.configuration.ServletConfigurator  
  10.         servlet-class> 
  11.         <init-param> 
  12.             <param-name>xmlFileparam-name> 
  13.             <param-value>WEB-INF/proxool.xmlparam-value> 
  14.         init-param> 
  15.         <load-on-startup>1load-on-startup> 
  16.     servlet> 
  17.     <servlet> 
  18.         <servlet-name>Adminservlet-name> 
  19.         <servlet-class> 
  20.             org.logicalcobwebs.proxool.admin.servlet.AdminServlet  
  21.         servlet-class> 
  22.     servlet> 
  23.     <servlet-mapping> 
  24.         <servlet-name>Adminservlet-name> 
  25.         <url-pattern>/adminurl-pattern> 
  26.     servlet-mapping> 
  27.     <servlet> 
  28.         <servlet-name>TestServletservlet-name> 
  29.         <servlet-class> 
  30.             selfservice.TestServlet  
  31.         servlet-class> 
  32.     servlet> 
  33.     <servlet-mapping> 
  34.         <servlet-name>TestServletservlet-name> 
  35.         <url-pattern>/TestServleturl-pattern> 
  36.     servlet-mapping> 
  37. web-app> 



以上配置完成后,第三步就可以创建一个连接池的类了

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.DBPool");   
  32.            //此处的DBPool是在proxool.xml中配置的连接池别名     
  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("DBPool", 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的连接池我用loadrunner进行大并发的测试,性能还是很好的。

Hibernate中proxool连接池的方式:

首先步骤跟JDBC的连接池一样,也是新建一个proxool.xml配置文件,再在web.xml中配置,具体参考上面。
第二步在hibernate的配置文件hibernate.cfg.xml中配置proxool连接设置:

hibernate.cfg.xml代码
xml 代码

   1. <property name="hibernate.connection.provider_class">org.hibernate.connection.ProxoolConnectionProviderproperty> 
   2.             <property name="hibernate.proxool.pool_alias">DBPoolproperty> 
   3.             <property name="hibernate.proxool.xml">proxoolconf.xmlproperty> 


Spring中proxool连接池的方式:

首先布骤与JDBC的连接池一样,先建一个proxool.xml配置文件,再在web.xml中配置,具体参考上面的。
第二步在spring配置文件applicationContext.xml中配置proxool连接设置
applicationContext.xml代码
xml 代码

   1. <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" singleton="true"> 
   2.         <property name="driverClassName" value="org.logicalcobwebs.proxool.ProxoolDriver"/> 
   3.         <property name="url" value="proxool.StatDBPool"/> 
   4.     bean> 
   5.     <bean id="transactionManager"   
   6.         class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
   7.         <property name="dataSource"> 
   8.             <ref local="dataSource" /> 
   9.         property> 
  10.     bean>  


这样spring就能得到一个dataSource的数据源。


proxool还有很多功能,我这只是简单的应用。具体请察看proxool用户指南。

最后更新
分享到:
评论
2 楼 jacklan 2008-01-07  
连接池的别名 好像配的不对吧! 
1 楼 java0 2008-01-07  
我的怎么报异常呀,找不到原因
0 [main] INFO proxool.ProxoolFacade  - Proxool 0.8.3 (14-Dec-2003 16:06)
15 [main] ERROR proxool.ProxoolDriver  - Problem
org.logicalcobwebs.proxool.ProxoolException: Attempt to refer to a unregistered pool by its alias 'ZHW'
at org.logicalcobwebs.proxool.ConnectionPoolDefinition.doChange(ConnectionPoolDefinition.java:237)
at org.logicalcobwebs.proxool.ConnectionPoolDefinition.<init>(ConnectionPoolDefinition.java:134)
at org.logicalcobwebs.proxool.ProxoolFacade.registerConnectionPool(ProxoolFacade.java:87)
at org.logicalcobwebs.proxool.ProxoolDriver.connect(ProxoolDriver.java:77)
at java.sql.DriverManager.getConnection(DriverManager.java:525)
at java.sql.DriverManager.getConnection(DriverManager.java:193)
at com.ry.bean.PoolManager.getConnection(PoolManager.java:32)
at com.ry.bean.PoolManager.main(PoolManager.java:125)
java.sql.SQLException: org.logicalcobwebs.proxool.ProxoolException: Attempt to refer to a unregistered pool by its alias 'ZHW'
at org.logicalcobwebs.proxool.ProxoolDriver.connect(ProxoolDriver.java:108)
at java.sql.DriverManager.getConnection(DriverManager.java:525)
at java.sql.DriverManager.getConnection(DriverManager.java:193)
at com.ry.bean.PoolManager.getConnection(PoolManager.java:32)
at com.ry.bean.PoolManager.main(PoolManager.java:125)

相关推荐

    Proxool连接池实例.zip

    在这个"Proxool连接池实例.zip"压缩包中,我们可以推测包含了一些关于如何在C#环境下集成和使用Proxool连接池的示例代码和相关资源。 首先,让我们深入理解一下Proxool连接池的工作原理。Proxool维护了一个数据库...

    proxool连接池用户名密码加密

    总之,"proxool连接池用户名密码加密"是一个重要的安全实践,通过加密数据库连接的凭证,我们可以提高系统的安全性,保护数据免受未经授权的访问。正确地配置和使用这个功能,可以确保在享受数据库连接池带来的性能...

    proxool连接池配置文件

    项目实用的proxool连接池配置文件,每个标签都有注释,可以直接拿来使用

    proxool相关jar包.rar

    Proxool是一个开源的、基于Apache 2.0许可证的JDBC连接池实现,它为Java应用程序提供了一个高效、灵活的数据库连接池解决方案。 描述中提到的"proxool-0.9.1.jar,proxool-cglib.jar,proxool-0.8.3.jar"是Proxool...

    proxool连接池所涉及的jar包文件

    在本压缩包中,包含的是与Proxool连接池相关的MySQL驱动jar包,这将有助于在Java应用程序中建立与MySQL数据库的连接。 首先,我们来深入理解一下Proxool连接池。Proxool的核心功能是创建一个池化的数据库连接集合,...

    proxool连接池.txt

    ### Proxool连接池知识点详解 #### 一、Proxool连接池简介 Proxool是Logical Cobwebs公司开发的一款轻量级的JDBC连接池组件。它通过提供高效的数据库连接管理和复用机制来提高应用程序的性能。Proxool不仅支持多种...

    proxool连接池使用详细说明

    Proxool连接池是数据库连接管理的一种解决方案,它允许应用程序高效地管理和复用数据库连接,以提高系统的性能和响应速度。下面将详细讲解Proxool连接池的使用方法及其核心概念。 1. **Proxool简介** Proxool是...

    在Hibernate中配置Proxool连接池

    本篇将详细介绍如何在Hibernate中配置Proxool连接池。 首先,我们需要在Spring的配置文件`applicationContext.xml`中设置SessionFactory Bean。SessionFactory是Hibernate的核心组件,它负责创建Session对象,而...

    proxool连接池jar包

    `proxool连接池jar包`是一个包含Proxool数据库连接池技术的软件包。Proxool作为源码开放的项目,源自著名的开源平台SourceForge,它为Java开发者提供了一个高效且易于管理的数据库连接池解决方案。数据库连接池在多...

    proxool连接池配置

    -- 连接池的别名 --&gt; &lt;alias&gt;DBPool&lt;/alias&gt; - &lt;!-- proxool只能管理由自己产生的连接 --&gt; &lt;driver-url&gt;jdbc:sqlserver://localhost:1433;dataBaseName=books&lt;/driver-url&gt; - &lt;!-- JDBC驱动程序 --&gt; ...

    FCK在线编译器JSP自定义函数Proxool连接池配置信息.

    总的来说,理解并熟练运用FCK在线编译器的JSP自定义函数和Proxool连接池配置,能够帮助开发者构建出更加高效、灵活的Web应用,同时优化数据库操作性能,提升用户体验。在实际开发过程中,结合文档学习和实践,可以更...

    proxool连接池

    **Proxool连接池详解** 在Java开发中,数据库连接管理是系统性能优化的重要环节。Proxool是一个轻量级的、开源的JDBC连接池,它为应用程序提供了高效的数据库连接管理。标题中的"proxool连接池"和描述中的"tomcat...

    Proxool连接池jar包

    Proxool连接池是数据库连接管理的一个开源工具,它提供了一种高效且灵活的方式来管理和复用数据库连接,以提升应用程序的性能和响应速度。在Java应用程序中,尤其是在高并发环境下,数据库连接池扮演着至关重要的...

    proxool-0.9.1.jar,proxool-cglib.jar

    Proxool是一个开源的数据库连接池解决方案,它允许开发者在Java应用程序中高效地管理数据库连接。数据库连接池是一种在多线程、高并发环境下优化数据库访问性能的技术,通过预先创建并维护一定数量的数据库连接,...

    Spring+Hibernate+Proxool连接池

    标题 "Spring+Hibernate+Proxool连接池" 涉及到的是在Java Web开发中,如何使用Spring框架集成Hibernate ORM框架,并结合Proxool作为数据库连接池的技术实践。这通常是为了提高应用性能,有效管理和复用数据库连接,...

    proxool连接池配置详解

    ### Proxool连接池配置详解 #### 一、概述 Proxool是一个开源的轻量级Java数据库连接池实现,其主要目标是替代常见的数据库连接池解决方案,如C3P0或DBCP,并且提供了更加灵活和易于配置的特性。在实际应用中,...

    Proxool连接池使用方法

    Proxool连接池使用方法 首先, 你要把下载 proxool 的 lib 下面所有的 jar 文件, 放到 WEB-INF/lib 下面, 另外, 把你的 jdbc driver 也放到相同的 lib,

    proxool-0.9.1.tar.gz

    `proxool-0.9.1.tar.gz` 是一个针对Java平台的开源数据库连接池实现,名为Proxool。在IT行业中,数据库连接池是一种重要的资源管理工具,它有效地管理和复用数据库连接,以提高应用性能,降低系统资源消耗。Proxool...

Global site tag (gtag.js) - Google Analytics