一、引子
要问WEB程序与什么关系最紧密,那答案毫无疑问将会是数据库,我们几乎所有的WEB程序都是建立在数据库之上的,怪不得有些人说WEB程序其实就是跑到数据库操作系统之上的应用程序。而相应的一些数据库产品和解决方案也就应运而生,比如大到Oracle,DB2,小到Mysql,另一方面数据库性能优化的方案例如连接池的出现也就好不奇怪了。而我们今天所要探讨的正是数据库连接池的一个方面。
二、Proxool介绍
目前数据库连接池产品非常之多,DBCP、C3P0、Proxool等都是非常优秀的产品,至于到底是用哪一个好那就取决与自己的喜好了,而我们今天将着重讨论Proxool,它这是一个Java SQL Driver驱动程序可以透明地为你现存的JDBC驱动程序增加连接池的功能,另外它提供一个的监控程序,可以实时的查看你系统所有连接池的使用情况,所以我个人偏好与它。
(PS:Hibernate最近声称DBCP存在问题,它将不会在新的版本中增加对DBCP的支持,并建议开发者使用C3P0或者Proxool,至于什么问题我们这里就不加讨论了)
三、使用Proxool
说到使用很多人看到大篇大篇的使用文档就会头疼,看到英文资料就会退缩,在这里我将会用我的方式简单的罗列出它基本的使用方法其他生僻的用法将会被忽略,虽然基本但我保证胜任你的项目绝对没有问题,不信?那就跟着我一点一点的深入:)
3.1 你需要了解
1.它的版本:目前最新版本是Proxool 0.9.0RC2,06年3月份刚更新
2.配置连接池的几种方式:总共3种,属性文件Properties方式、Xml方式、程序中声明方式,由于最后一种(程序声明方式)比较老土也比较少用,所以在接下来的说明种将忽略它。
3.连接池的使用范围:2种情况-web中的使用(带servlet的)、应用程序中的使用(带main函数的)。
3.2 配置第一步
这一步我们将配置proxool的监控程序。
准备条件:
1、一个空的web工程项目,可以部署到应用服务器。
2、加载proxool-0.9.0RC2到lib目录
配置步骤:
1、在WEB-INF下增加文件proxool.xml,文件内容如下
<?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>proxool</servlet-name>
<servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>proxool</servlet-name>
<url-pattern>/admin</url-pattern>
</servlet-mapping>
</web-app>
至此你的监控程序已经部署完成了!啊?这么快?对!就这么简单,你可以访问http://localhost:8080/proxool/admin来查看了,可惜的是现在没有一个连接创建。。。那接下来就让我们开始创建连接噢!
3.3 配置第二步
这一步主要以xml的方式配置数据库的各个参数。
准备条件:
在第一步完成的基础之上。
配置步骤:
1、在WEB-INF下建立proxool.xml文件,文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<something-else-entirely>
<proxool>
<alias>magicexml</alias>
<driver-url>jdbc:mysql://127.0.0.1:3306/gatewayserver</driver-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<driver-properties>
<property name="user" value="root"/>
<property name="password" value="1234"/>
</driver-properties>
<minimum-connection-count>6</minimum-connection-count>
<maximum-connection-count>20</maximum-connection-count>
<house-keeping-test-sql>select CURRENT_DATE</house-keeping-test-sql>
</proxool>
</something-else-entirely>
至于文件内容中的各个参数的含义,待会将会逐一解释,而在这里你需要修改的地方有<diriver-url>、<driver-class>以及数据库用户名和密码。
2、修改web.xml文件,增加一下内容:
<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>
3、建立testservlet这样一个servlet类,类的代码如下
package DBProxool;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class testservlet extends HttpServlet ......{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException ......{
Connection conn = null;
try ......{
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
conn = DriverManager.getConnection("proxool.magicexml");
/** *//** *//** *//**
用conn做任何你想做的事情
**/
if(conn!=null)......{
conn.close();
}
} catch (ClassNotFoundException e) ......{
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) ......{
e.printStackTrace();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException ......{
}
}
重启服务器,访问testservlet,查看监控程序,哈哈~看到连接了,如下图
3.4 配置第三步
这一步主要配置连接池的一些参数。
由于整个程序已经可以运行起来了,或许你很高兴,但是你可不要高兴的太早,如果就这样拿你的项目去做压力测试,那十有八九是通不过的!为什么啊?因为你的连接池还没有经过参数的调优,下面我就简单的介绍一下各个参数的意思,你明白了这些,压力测试肯定不成问题。
house-keeping-sleep-time: house keeper 保留线程处于睡眠状态的最长时间,house keeper 的职责就是检查各个连接的状态,并判断是否需要销毁或者创建,这个的默认值是30秒。
house-keeping-test-sql: 如果发现了空闲的数据库连接.house keeper 将会用这个语句来测试.这个语句最好非常快的被执行.如果没有定义,测试过程将会被忽略。
maximum-active-time: 如果housekeeper 检测到某个线程的活动时间大于这个数值.它将会杀掉这个线程.所以确认一下你的服务器的带宽.然后定一个合适的值.默认是5分钟。经常有些人或许会遇到正在执行的程序忽然拒绝连接,莫明其妙的程序假死,这些都与这个参数的设置有关,我们大部分数据库操作都会在5分钟之内完成,可是偏偏有些可能5分钟还完成不了,而这个值如果按照默认值的话,连接池就会不管你到底有没有执行完,都会强行关闭数据库连接,所以这个值你可要小心设置哦:)
maximum-connection-count: 最大的数据库连接数.一般的大应用设置30就足够了。
maximum-connection-lifetime: 一个线程的最大寿命.
minimum-connection-count: 最小的数据库连接数,一般最好事先初始化一部分连接这样,对于初次连接数据库的应用效率比较高,推荐设置5-10
prototype-count: 连接池中可用的连接数量.如果当前的连接池中的连接少于这个数值.新的连接将被建立(假设没有超过最大可用数).例如.我们有3个活动连接2个可用连接,而我们的prototype-count是4,那么数据库连接池将试图建立另外2个连接.这和 minimum-connection-count不同. minimum-connection-count把活动的连接也计算在内.prototype-count 是spare connections 的数量.
trace: 如果为true,那么每个被执行的SQL语句将会在执行期被log记录(DEBUG LEVEL).你也可以注册一个ConnectionListener (参看ProxoolFacade)得到这些信息.
四、结束
至此有关于proxool的讨论到此为止,感觉是不是很简单呢?~没错如果学会的话就是这么简单^_^,至于怎么去在spring中集成等深入的讨论,在我以后的系列中你将会一点一点的接触到。
分享到:
相关推荐
Proxool是SSH框架中常用的数据库连接池之一,以其轻量级、灵活配置和优秀的性能表现而受到青睐。 数据库连接池的基本原理是预先在内存中创建一定数量的数据库连接,应用程序在需要时可以从池中获取连接,使用完毕后...
Proxool是Apache Software Foundation开发的一个开源数据库连接池实现,它在Java环境中广泛使用,以提升应用的性能和资源利用率。 在传统的JDBC编程中,每次需要与数据库交互时,都需要创建一个新的连接,执行完SQL...
Proxool是其中一个轻量级、开源的数据库连接池实现,它提供了灵活的配置和监控功能。 Proxool的工作原理: 1. 当应用程序需要数据库连接时,不再直接创建新的连接,而是从连接池中获取已经建立好的连接。 2. 如果...
Proxool是Apache的一个开源项目,提供了一个轻量级的数据库连接池实现。在本配置中,我们将探讨如何使用Proxool来配置MySQL数据库,以解决8小时连接时限问题,并方便地集成到Tomcat服务器中。 **1. Proxool简介** ...
Proxool是Apache软件基金会提供的一款开源的数据库连接池实现,它的主要功能是管理和复用数据库连接,避免了频繁创建和关闭数据库连接所导致的性能开销。在Java环境下,Proxool.jar是使用Proxool数据库连接池服务的...
本文将详细介绍Proxool数据库连接池及其监控功能,通过一个实际的实例来展示其工作原理和使用方法。 Proxool是Apache软件基金会的一个开源项目,它提供了一个轻量级、高性能的数据库连接池解决方案。Proxool与其他...
总结,配置Hibernate中的第三方数据库连接池Proxool,可以提升系统的性能和资源利用率。正确配置和使用Proxool,对于Java Web开发者来说,是优化数据库访问策略、提升系统稳定性和响应速度的重要手段。
标题中提到的"各种数据库连接池",包括了c3p、DBCP和Proxool,这些都是Java环境下常见的数据库连接池实现: 1. **C3P0**:这是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。...
### Proxool数据库连接池配置详解 #### 一、引言 Proxool是一个轻量级的Java数据库连接池管理工具,它可以帮助开发者更高效地管理和利用数据库连接资源。通过Proxool,可以显著减少数据库连接创建和关闭的开销,...
本文将深入解析几种常用的数据库连接池——Apache DBCP、C3P0、Proxool、BoneCP的详细配置参数,帮助开发者更好地理解和应用这些技术。 ### Apache DBCP **dataSource**: 配置数据源,通常在应用服务器的配置文件...
Proxool是Apache软件基金会开发的一个开源数据库连接池实现,它提供了一种灵活且可配置的方式来管理数据库连接资源。 首先,让我们深入理解什么是Java连接池。在Java编程中,JDBC(Java Database Connectivity)...
### 数据库连接池-连接的关闭内幕 在深入探讨数据库连接池中连接关闭的问题之前,我们首先需要了解数据库连接池的基本概念以及它在现代应用程序中的重要性。数据库连接池是一种管理多个数据库连接的方法,旨在提高...
Proxool是Apache软件基金会的一个开源项目,提供了一个轻量级、高性能的数据库连接池解决方案。本篇文章将深入探讨Proxool数据库连接池的配置及其重要性。 首先,理解Proxool的基本概念是必要的。Proxool是Proxy + ...
在Java中,有多种数据库连接池实现,包括C3P0、DBCP和Proxool等。 **C3P0连接池配置参数详解** 1. `acquireIncrement`:当连接池中的连接耗尽时,一次同时尝试获取的连接数。默认值为3,意味着如果连接池为空,它...
标题“proxool_0.9.1”提及的是一个名为Proxool的数据库连接池管理工具的特定版本,即0.9.1。Proxool是Apache软件基金会的一个开源项目,它提供了一种轻量级的数据库连接池解决方案,允许开发者更有效地管理和控制...
Proxool是一个开源的、轻量级的Java数据库连接池实现,它提供了一种高效、灵活的方式来管理数据库连接。在某些场景下,为了保护敏感信息,如数据库的用户名和密码,我们需要对这些数据进行加密处理。"proxool连接池...
在Java开发中,数据库连接池是一种重要的资源管理工具,它允许开发者高效地管理和复用数据库连接,从而提高系统的性能和稳定性。数据库连接池的基本原理是预先创建一定数量的数据库连接,当应用程序需要访问数据库时...
Proxool就是这样一个选择,它是Apache Software Foundation的一个项目,提供了一个高性能、可配置的数据库连接池实现。 Proxool连接池的工作原理主要包括以下几个方面: 1. 连接初始化:在应用启动时,Proxool会...
基于proxool插件有3种方式实现联接池。 1) JSP 运行程序中Test.jsp即可建立连接池 2) 应用程序实现。 3) Xml实现。 很简单。(推荐) <br>内有proxool及相关说明
proxool数据库连接池jar2013-4月份的