您的位置:首页 > 编程语言 > Java开发

proxool连接池配置说明(与jdbc、Hibernate、Spring之间的配置)

2013-03-28 08:53 411 查看

proxool 简单使用

首先从 http:// href="http://proxool.sourceforge.net/" target=_blank>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.javaeye.com/admin/show/117225

Ps:proxool-0.9.0RC2.zip下载包放在了:http://download.csdn.net/detail/yaowanpengliferay/5190005

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

JDBC连接方法:

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

proxool.xml 代码xml 代码

xmlversion="1.0"encoding="UTF-8"?>

<something-else-entirely>
<proxool>

<alias>DBPoolalias>

<driver-url>jdbc:oracle:thin:@192.168.0.40:1521:drcomdriver-url>

<driver-class>oracle.jdbc.driver.OracleDriverdriver-class>
<driver-properties>
<propertyname="user"value="drcom"/>
<propertyname="password"value="drcom"/>
driver-properties>

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

<maximum-new-connections>150maximum-new-connections>

<prototype-count>3prototype-count>

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

<minimum-connection-count>3minimum-connection-count>
proxool>
something-else-entirely>

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

web.xml 代码

xml 代码

xmlversion="1.0"encoding="UTF-8"?>
<web-appversion="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>ServletConfiguratorservlet-name>
<servlet-class>
org.logicalcobwebs.proxool.configuration.ServletConfigurator
servlet-class>
<init-param>
<param-name>xmlFileparam-name>
<param-value>WEB-INF/proxool.xmlparam-value>
init-param>
<load-on-startup>1load-on-startup>
servlet>
<servlet>
<servlet-name>Adminservlet-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>TestServletservlet-name>
<servlet-class>
selfservice.TestServlet
servlet-class>
servlet>
<servlet-mapping>
<servlet-name>TestServletservlet-name>
<url-pattern>/TestServleturl-pattern>
servlet-mapping>
web-app>

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

java 代码

packageselfservice;

importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.ResultSet;
importjava.sql.SQLException;
importjava.sql.Statement;

importorg.logicalcobwebs.proxool.ProxoolException;
importorg.logicalcobwebs.proxool.ProxoolFacade;
importorg.logicalcobwebs.proxool.admin.SnapshotIF;

publicclassPoolManager {

privatestaticintactiveCount =0;

publicPoolManager(){

}
/**
* 获取连接
* getConnection
* @param name
* @return
*/
publicConnection getConnection() {
try{
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");//proxool驱动类
Connection conn = DriverManager.getConnection("proxool.DBPool");
//此处的DBPool是在proxool.xml中配置的连接池别名
showSnapshotInfo();

returnconn;
}catch(Exception ex){
ex.printStackTrace();
}
returnnull;
}
/**
* 此方法可以得到连接池的信息
* showSnapshotInfo
*/
privatevoidshowSnapshotInfo(){
try{
SnapshotIF snapshot = ProxoolFacade.getSnapshot("DBPool",true);
intcurActiveCount=snapshot.getActiveConnectionCount();//获得活动连接数
intavailableCount=snapshot.getAvailableConnectionCount();//获得可得到的连接数
intmaxCount=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
*/
publicConnection getConnection(String name){
returngetConnection();
}
/**
* 释放连接
* freeConnection
* @param conn
*/
publicvoidfreeConnection(Connection conn){
if(conn!=null){
try{
conn.close();
}catch(SQLException e) {
e.printStackTrace();
}
}
}
/**
* 释放连接
* freeConnection
* @param name
* @param con
*/
publicvoidfreeConnection (String name,Connection con){
freeConnection(con);
}

publicvoidgetQuery() {
try{
Connection conn = getConnection();
if(conn !=null){
Statement statement = conn.createStatement();
ResultSet rs = statement.executeQuery("select * from tblgxinterface");
intc = rs.getMetaData().getColumnCount();
while(rs.next()){
System.out.println();
for(inti=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 代码

<propertyname="hibernate.connection.provider_class">org.hibernate.connection.ProxoolConnectionProviderproperty>
<propertyname="hibernate.proxool.pool_alias">DBPoolproperty>
<propertyname="hibernate.proxool.xml">proxoolconf.xmlproperty>

Spring中proxool连接池的方式:



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

第二步在spring配置文件applicationContext.xml中配置proxool连接设置

applicationContext.xml代码 xml 代码

<beanid="dataSource"class="org.springframework.jdbc.datasource.DriverManagerDataSource"singleton="true">
<propertyname="driverClassName"value="org.logicalcobwebs.proxool.ProxoolDriver"/>
<propertyname="url"value="proxool.StatDBPool"/>
bean>
<beanid="transactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<propertyname="dataSource">
<reflocal="dataSource"/>
property>
bean>

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

proxool还有很多功能,我这只是简单的应用。具体请察看proxool用户指南。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: