`

proxool连接池的实现

    博客分类:
  • Java
阅读更多

作为开源的连接池Proxool有以下优点
透明性   可以明的添加接连池而不影响你原来的项目的JDBC代码;
开放性 你可以方便的与其它的开源产品进行整合。如hibernate  中自带的这个Proxool
标准性 它是在J2SE下开出来的。你可以放心的开发
易用性  非常容易 的进行配置。
proxool是一个非常强大的连接池工具包,我觉得相比dbcp、c3p0这两个连接池包都要好用,我用loadrunner测试过,这三个连接池的从性能上排名如下:proxool>c3p0>dbcp,特别是dbcp在大并发的情况下总是出现各种异常。

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

JDBC连接方法:
首先建一个proxool的配置文件proxool.xml

proxool.xml 代码

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

 

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


web.xml 代码

<!--sp-->xml version="1.0" encoding="UTF-8"?>   
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"   
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee     
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">   
    <servlet>   
        <servlet-name>ServletConfigurator</servlet-name>   
        <servlet-class>   
            org.logicalcobwebs.proxool.configuration.ServletConfigurator     
        </servlet-class>   
        <init-param>   
            <param-name>xml</Fileparam-name>   
            <param-value>WEB-INF/proxool.xml</param-value>   
        </init-param>   
        <load-on-startup>1</load-on-startup>   
    </servlet>   
    <servlet>   
        <servlet-name>Admin</servlet-name>   
        <servlet-class>   
            org.logicalcobwebs.proxool.admin.servlet.AdminServlet     
        </servlet-class>   
    </servlet>   
    <servlet-mapping>   
        <servlet-name>Adminservlet-name>   
        <url-pattern>/adminurl-pattern>   
    </servlet-mapping>   
    <servlet>   
        <servlet-name>TestServlet</servlet-name>   
        <servlet-class>   
            selfservice.TestServlet     
        </servlet-class>   
    </servlet>   
    <servlet-mapping>   
        <servlet-name>TestServlet</servlet-name>   
        <url-pattern>/TestServlet</url-pattern>   
    </servlet-mapping>   
</web-app>   

 

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

package selfservice;         
       
import java.sql.Connection;         
import java.sql.DriverManager;         
import java.sql.ResultSet;         
import java.sql.SQLException;         
import java.sql.Statement;         
       
import org.logicalcobwebs.proxool.ProxoolException;         
import org.logicalcobwebs.proxool.ProxoolFacade;         
import org.logicalcobwebs.proxool.admin.SnapshotIF;         
       
       
public class PoolManager {         
             
    private static int activeCount = 0;         
             
             
    public PoolManager(){         
                 
    }           
    /**       
     * 获取连接       
     * getConnection       
     * @param name       
     * @return       
     */       
    public Connection getConnection() {         
        try{         
            Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");//proxool驱动类         
            Connection conn = DriverManager.getConnection("proxool.DBPool");     
           //此处的DBPool是在proxool.xml中配置的连接池别名       
            showSnapshotInfo();         
                     
            return conn;         
        }catch(Exception ex){         
            ex.printStackTrace();         
        }         
        return null;         
    }         
    /**       
     * 此方法可以得到连接池的信息       
     * showSnapshotInfo       
     */       
    private void showSnapshotInfo(){         
        try{         
            SnapshotIF snapshot = ProxoolFacade.getSnapshot("DBPool", true);         
            int curActiveCount=snapshot.getActiveConnectionCount();//获得活动连接数         
            int availableCount=snapshot.getAvailableConnectionCount();//获得可得到的连接数         
            int maxCount=snapshot.getMaximumConnectionCount() ;//获得总连接数         
            if(curActiveCount!=activeCount)//当活动连接数变化时输出的信息         
            {         
             System.out.println("活动连接数:"+curActiveCount+"(active)  可得到的连接数:"+availableCount+"(available)  总连接数:"+maxCount+"(max)");                     
             activeCount=curActiveCount;         
            }         
        }catch(ProxoolException e){         
            e.printStackTrace();         
        }         
    }         
    /**       
     * 获取连接       
     * getConnection       
     * @param name       
     * @return       
     */       
    public Connection getConnection(String name){         
        return getConnection();         
    }         
    /**       
     * 释放连接       
     * freeConnection       
     * @param conn       
     */       
    public void freeConnection(Connection conn){         
        if(conn!=null){         
            try {         
                conn.close();         
            } catch (SQLException e) {                       
                e.printStackTrace();         
            }         
        }         
    }         
    /**       
     * 释放连接       
     * freeConnection       
     * @param name       
     * @param con       
     */       
    public void freeConnection (String name,Connection con){         
        freeConnection(con);         
    }         
             
    public void getQuery() {                 
        try {         
            Connection conn = getConnection();         
            if(conn != null){         
                Statement statement = conn.createStatement();         
                ResultSet rs = statement.executeQuery("select * from tblgxinterface");         
                int c = rs.getMetaData().getColumnCount();         
                while(rs.next()){                           
                    System.out.println();         
                    for(int i=1;i<=c;i++){         
                        System.out.print(rs.getObject(i));         
                    }         
                }         
                rs.close();         
            }         
            freeConnection(conn);         
        } catch (SQLException e) {                   
            e.printStackTrace();         
        }         
       
    }         
       
}       

 



就这样我们完成了一个连接池的功能。proxool的连接池我用loadrunner进行大并发的测试,性能还是很好的。

Hibernate中proxool连接池的方式

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


hibernate.cfg.xml代码

<property name="hibernate.connection.provider_class">org.hibernate.connection.ProxoolConnectionProvider</property>   
            <property name="hibernate.proxool.pool_alias">DBPool</property>   
            <property name="hibernate.proxool.xml">proxoolconf.xml</property>

 

Spring中proxool连接池的方式

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

applicationContext.xml代码 

<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" singleton="true">   
        <property name="driverClassName" value="org.logicalcobwebs.proxool.ProxoolDriver"/>   
        <property name="url" value="proxool.StatDBPool"/>   
    </bean>   
    <bean id="transactionManager"     
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">   
        <property name="dataSource">   
            <ref local="dataSource" />   
        </property>   
    </bean>

     


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


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

分享到:
评论

相关推荐

    proxool连接池用户名密码加密

    Proxool是一个开源的、轻量级的Java数据库连接池实现,它提供了一种高效、灵活的方式来管理数据库连接。在某些场景下,为了保护敏感信息,如数据库的用户名和密码,我们需要对这些数据进行加密处理。"proxool连接池...

    proxool连接池使用详细说明

    Proxool是Apache软件基金会的一个开源项目,它提供了一个轻量级的数据库连接池实现。Proxool通过创建一个数据库连接池来管理数据库连接,避免了频繁创建和销毁连接带来的开销,提高了系统资源利用率。 2. **安装与...

    proxool连接池配置文件

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

    在Hibernate中配置Proxool连接池

    Proxool是Apache的一个开源项目,它提供了一个轻量级的数据库连接池实现。本篇将详细介绍如何在Hibernate中配置Proxool连接池。 首先,我们需要在Spring的配置文件`applicationContext.xml`中设置SessionFactory ...

    Proxool连接池使用方法

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

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

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

    Proxool是Apache软件基金会的一个开源项目,它提供了一个轻量级的数据库连接池实现。在本压缩包中,包含的是与Proxool连接池相关的MySQL驱动jar包,这将有助于在Java应用程序中建立与MySQL数据库的连接。 首先,...

    proxool连接池配置详解

    Proxool是一个开源的轻量级Java数据库连接池实现,其主要目标是替代常见的数据库连接池解决方案,如C3P0或DBCP,并且提供了更加灵活和易于配置的特性。在实际应用中,合理配置Proxool可以显著提高系统的性能和稳定性...

    ssh2简单案例,注解+proxool连接池+sf4j记录日志

    在这个"ssh2简单案例"中,我们将探讨如何结合注解、Proxool连接池和SF4J日志记录来构建一个SSH2注册登录系统。 首先,SSH2在Java中的实现通常通过JSch库来完成。JSch允许开发者在Java程序中执行命令、传输文件以及...

    Spring+Hibernate+Proxool连接池

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

    proxool连接池jar包

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

    Proxool连接池jar包

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

    proxool连接池

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

    Hibernate Proxool连接池配置总结及常遇问题

    Proxool是一个开源的数据库连接池实现,它提供了动态、可扩展的连接池管理服务。通过Proxool,开发者可以方便地监控和调整连接池参数,以适应不同规模的应用需求。 **2. 配置步骤** **(1)引入依赖** 首先,需要...

    Proxool连接池实例.zip

    Proxool是一个开源的、轻量级的Java数据库连接池实现,它允许应用程序高效地管理和重用数据库连接,以提高系统的响应速度和并发处理能力。在这个"Proxool连接池实例.zip"压缩包中,我们可以推测包含了一些关于如何在...

    基于ssh的proxool连接池配置

    下面我们将深入探讨基于SSH的Proxool连接池配置。 首先,配置环境:MyEclipse5.5,Windows 2003操作系统,Oracle和MySQL数据库。在这样的环境中,Proxool连接池可以帮助我们更高效地管理数据库连接,提高应用程序的...

    Proxool连接池配置

    Proxool作为一款轻量级的开源数据库连接池实现,它提供了高效的数据库连接管理和复用机制,旨在减少应用程序创建和销毁数据库连接的开销,从而提升性能。 ### Proxool连接池配置步骤详解 #### 步骤一:部署Proxool...

    Spring2.5配置proxool连接池

    Spring2.5配置proxool连接池

    ssh小框架(proxool连接池)

    **Proxool连接池**:Proxool是数据库连接池的一种实现,它的主要作用是管理数据库连接,减少创建和销毁连接的开销。当多个用户请求数据库连接时,Proxool会复用已存在的连接,而不是每次请求都新建一个。这大大提高...

Global site tag (gtag.js) - Google Analytics