`
jqs1124
  • 浏览: 44452 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Proxool实现数据库连接池的具体配置方法

 
阅读更多
首先从 http://proxool.sourceforge.net/ 下载
proxool-0.9.1.zip

解压后,把proxool-0.9.1.jar,proxool-cglib.jar放到工程的lib文件夹里面。
proxool是一个非常强大的连接池工具包,我觉得相比dbcp、c3p0这两个连接池包都要好用,这三个连接池的从 性能上排名如下:proxool>c3p0>dbcp,特别是dbcp在大并发的情况下总是出现各种异常。

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

JDBC连接方法:(数据库是SQL server2000 ,使用jtds-1.2.2.jar驱动)

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

proxool.xml 代码
<?xml version="1.0" encoding="UTF-8"?>
<something-else-entirely>
<proxool>

<alias>DBPool</alias>

<driver-url>jdbc:jtds:sqlserver://localhost:1433;DatabaseName=test;SelectMethod=cursor</driver-url>

<driver-class>net.sourceforge.jtds.jdbc.Driver</driver-class>
<driver-properties>
<property name="user" value="sa"/>
<property name="password" value="PASS"/>
</driver-properties>

<minimum-connection-count>3</minimum-connection-count>

<prototype-count>5</prototype-count>

<simultaneous-build-throttle>20</simultaneous-build-throttle>

<maximum-connection-count>100</maximum-connection-count>

<house-keeping-sleep-time>90000</house-keeping-sleep-time>

<house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>

</proxool>
</something-else-entirely>
 
配置说明:
alias -->数据库连接别名(程序中需要使用的名称)
driver-url -->数据库驱动
driver-class -->驱动程序类
driver-properties -->数据库的用户和密码
minimum-connection-count -->最小连接数量,建议设置0以上,保证第一次连接时间
maximum-connection-count -->最大连接数量,如果超过最大连接数量则会抛出异常。连接数设置过多,服务器CPU和内存性能消耗很大。
simultaneous-build-throttle -->同时最大连接数
注意是:simultaneous-build-throttle 而不是 proxool.simultaneous-build-throttle,我看很多人的博客上都写的是proxool.simultaneous-build-throttle,真搞不懂他们有没有自己验证过。

prototype-count -->一次产生连接的数量。 但不能超过最大连接数。
maximum-active-time -->连接最大活动时间 默认5分钟
maximum-connection-lifetime -->连接最大生命时间 默认4小时
house-keeping-test-sql --> 测试数据库连接的sql语句
 
其中有几个地方需要注意:
1)<alias>DBPool</alias>这个是给连接池取一个别名,在hibernate配置文件中将引用这个别名。
2)<driver-url>jdbc:jtds:sqlserver://localhost:1433;DatabaseName=test;SelectMethod=cursor;characterEncoding=UTF-8</driver-url>
这个是驱动的路径,使用其余数据库需要更改成对应的。还有需要注意的是工程名要以数据库名为准。
3)<driver-class>om.mysql.jdbc.Driver</driver-class>
这个是数据库驱动类,不同的数据库采用不同的驱动类,即使采用同一种数据库也有多种驱动类,所以一定要选取准确。
4) <driver-properties>
<propertyname="user"value="*** "/>
<propertyname="password"value="*** "/>
</driver-properties>
这个显示数据库的用户名和密码。
5)<house-keeping-sleep-time>90000</house-keeping-sleep-time>
这个显示proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁
6)<maximum-new-connections>20</maximum-new-connections>
这个 指因未有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受
7)<prototype-count>5</prototype-count>
这个显示最少保持的空闲连接数
8)<maximum-connection-count>100</maximum-connection-count>
这个显示允许最大连接数,超过了这个连接,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new-connections决定
9)<minimum-connection-count>10</minimum-connection-count>
这个显示最小连接数
最后需要注意的是不要在这个配置文件里面写(中文)注释,英文没事,不然会错误。
 
 
再在web.xml中进行配置,其中的ServletConfigurator是装载WEB-INF目录下的proxool.xml,并设置为Tomcat启动时就加载。
Admin这个Servlet是proxool提供的察看连接池的信息的工具
web.xml 代码
xml 代码
 
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>
org.apache.struts.action.ActionServlet
</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>


<servlet>
<servlet-name>ServletConfigurator</servlet-name>
<servlet-class>
org.logicalcobwebs.proxool.configuration.ServletConfigurator
</servlet-class>
<init-param>
<param-name>xmlFile</param-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>Admin</servlet-name>
<url-pattern>/admin</url-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>

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

java 代码

 

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代码
xml 代码
  1. <propertyname="hibernate.connection.provider_class">org.hibernate.connection.ProxoolConnectionProviderproperty>
  2. <propertyname="hibernate.proxool.pool_alias">DBPoolproperty>
  3. <propertyname="hibernate.proxool.xml">proxoolconf.xmlproperty>


Spring中proxool连接池的方式:

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

applicationContext.xml代码
xml 代码
  1. <beanid="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"singleton="true">
  2. <propertyname="driverClassName"value="org.logicalcobwebs.proxool.ProxoolDriver"/>
  3. <propertyname="url"value="proxool.StatDBPool"/>
  4. bean>
  5. <beanid="transactionManager"
  6. class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  7. <propertyname="dataSource">
  8. <reflocal="dataSource"/>
  9. property>
  10. bean>

 

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


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

 

 

来自:http://www.zjsyc.com/blog/article/database/122.html

分享到:
评论

相关推荐

    proxool数据库连接池实例(带监控功能)

    本文将详细介绍Proxool数据库连接池及其监控功能,通过一个实际的实例来展示其工作原理和使用方法。 Proxool是Apache软件基金会的一个开源项目,它提供了一个轻量级、高性能的数据库连接池解决方案。Proxool与其他...

    proxool数据库连接池配置

    ### Proxool数据库连接池配置详解 #### 一、引言 Proxool是一个轻量级的Java数据库连接池管理工具,它可以帮助开发者更高效地管理和利用数据库连接资源。通过Proxool,可以显著减少数据库连接创建和关闭的开销,...

    数据库连接池包(proxool.jar)

    在Java环境下,Proxool.jar是使用Proxool数据库连接池服务的必备库文件。 首先,我们需要理解数据库连接池的工作原理。数据库连接池在初始化时会创建一定数量的数据库连接并保存在池中,当应用程序需要访问数据库时...

    关于proxool数据库连接池的配置集合

    本篇文章将深入探讨Proxool数据库连接池的配置及其重要性。 首先,理解Proxool的基本概念是必要的。Proxool是Proxy + Pool的组合,它通过代理(Proxy)机制来管理数据库连接,使得应用程序可以透明地使用连接池。...

    使用数据库连接池proxool配置mysql数据库

    Proxool是Apache的一个开源项目,提供了一个轻量级的数据库连接池实现。在本配置中,我们将探讨如何使用Proxool来配置MySQL数据库,以解决8小时连接时限问题,并方便地集成到Tomcat服务器中。 **1. Proxool简介** ...

    ssh数据库连接池proxool

    Proxool是SSH框架中常用的数据库连接池之一,以其轻量级、灵活配置和优秀的性能表现而受到青睐。 数据库连接池的基本原理是预先在内存中创建一定数量的数据库连接,应用程序在需要时可以从池中获取连接,使用完毕后...

    java数据库连接池Proxool

    Proxool是其中一个轻量级、开源的数据库连接池实现,它提供了灵活的配置和监控功能。 Proxool的工作原理: 1. 当应用程序需要数据库连接时,不再直接创建新的连接,而是从连接池中获取已经建立好的连接。 2. 如果...

    proxool连接池用户名密码加密

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

    几种数据库连接池详细配置

    本文将深入解析几种常用的数据库连接池——Apache DBCP、C3P0、Proxool、BoneCP的详细配置参数,帮助开发者更好地理解和应用这些技术。 ### Apache DBCP **dataSource**: 配置数据源,通常在应用服务器的配置文件...

    JAVA数据库连接池proxool

    Proxool是Apache Software Foundation开发的一个开源数据库连接池实现,它在Java环境中广泛使用,以提升应用的性能和资源利用率。 在传统的JDBC编程中,每次需要与数据库交互时,都需要创建一个新的连接,执行完SQL...

    数据库连接池-连接的关闭内幕

    数据库连接池是一种管理多个数据库连接的方法,旨在提高应用程序性能并减少资源消耗。通过复用已有的数据库连接而非每次请求时创建新的连接,连接池可以显著减少数据库访问延迟,并优化资源利用。 #### 数据库连接...

    Java各数据库连接池配置介绍

    在Java中,有多种数据库连接池实现,包括C3P0、DBCP和Proxool等。 **C3P0连接池配置参数详解** 1. `acquireIncrement`:当连接池中的连接耗尽时,一次同时尝试获取的连接数。默认值为3,意味着如果连接池为空,它...

    各种数据库连接池

    标题中提到的"各种数据库连接池",包括了c3p、DBCP和Proxool,这些都是Java环境下常见的数据库连接池实现: 1. **C3P0**:这是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。...

    c3p0、proxool、dbcp数据库连接池

    综上所述,C3P0、DBCP和Proxool是常见的数据库连接池实现,它们各有优缺点,选择哪种取决于项目的具体需求。而Log4j2作为强大的日志框架,能够帮助开发者更好地追踪和分析程序运行情况。在实际开发中,合理使用这些...

    利用hibernate+spring配置proxool连接池连接Access数据库

    proxool-0.9.1(my).jar 包是我修改了proxool-0.9.1后的jar包,修改后可以完全支持spring配置,并添加了charSet配置属性,用于配置数据库链接的设置默认字符集,并且解决了proxool数据库连接池报如下错误的问题:...

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

    javaEE数据库连接池

    Proxool就是这样一个选择,它是Apache Software Foundation的一个项目,提供了一个高性能、可配置的数据库连接池实现。 Proxool连接池的工作原理主要包括以下几个方面: 1. 连接初始化:在应用启动时,Proxool会...

    proxool连接池jar包

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

Global site tag (gtag.js) - Google Analytics