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

Struts2+spring+hibernate中的proxool连接池配置

阅读更多

      最近做的一个项目中运用到了连接池技术,可能我们大家比较熟悉的开源连接池有dbcp,c3p0,proxool。对这三种连接池来说,从性能和出错率来说,proxool稍微比前两种好些。今天主要讲述一下,我在项目中成功的配置和源码。

 

第一步:首先去http://proxool.sourceforge.net/下载两个jar文件,一个是proxool-0.9.1.jar,另一个是proxool-cglib.jar,然后将这两个jar文件放到WEB-INF/lib下。

 

第二步:就是写一个单独的proxool.xml文件放到WEB-INF文件夹下。我用的数据库是Oracle10g。

<?xml version="1.0" encoding="UTF-8"?>
<something-else-entirely>
 <proxool>
     <!-- 连接池的名字 -->
  <alias>dbPool</alias>
  <!--proxool只能管理由自己产生的连接-->
  <driver-url>
   jdbc:oracle:thin:@192.168.0.244:1521:qdhw
  </driver-url>
  <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
  <driver-properties>
   <property name="user" value="qdhw" />
   <property name="password" value="qdhw" />
  </driver-properties>
  <!-- proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁-->
  <house-keeping-sleep-time>90000</house-keeping-sleep-time>
  <!-- 指因未有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受-->
  <maximum-new-connections>30</maximum-new-connections>
  <!-- 最少保持的空闲连接数-->
  <prototype-count>5</prototype-count>
  <!-- 允许最大连接数,超过了这个连接,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new-connections决定-->
  <maximum-connection-count>200</maximum-connection-count>
  <!-- 最小连接数-->
  <minimum-connection-count>10</minimum-connection-count>
 </proxool>

</something-else-entirely>

 

第三步:加载并初始化proxool.xml文件。因为它是连接数据库的,其他很多模块都用到数据,所以你必须首先加载它,在web.xml中进行如下配置:如果你以前加载applicationContext.xml用的是:
<listener>
    <listener-class>
  org.springframework.web.context.ContextLoaderListener
    </listener-class>
 </listener>
  这时你必须换成如下配置:
 <servlet>
  <servlet-name>contextConfigLocation</servlet-name>
  <servlet-class>
   org.springframework.web.context.ContextLoaderServlet
  </servlet-class>
  <load-on-startup>2</load-on-startup>
 </servlet>
 要不然你就会遇见这样的错误:
Problem   
org.logicalcobwebs.proxool.ProxoolException: Attempt to refer to a unregistered pool by its
alias 'dbPool'
      如果用过proxool与spring整合时,不少就遇到过这样的问题,其实这个问题很明显就是你的proxool.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>
  把<load-on-startup>的值设为1,值越小级别就越高,就先被加载初始化。一定要先于applicationContext.xml的加载。

第三步是参照网上的一些文章,试了许久,还是有错误,还是不行。几经折腾,在网上找到了解决的办法,就是自己写个监听器,用它来起动proxool连接池,然后在web.xml中配置一下,我的配置如下:

 

<!-- 配置proxool.xml连接池监听类 -->
   <context-param>
    <param-name>xmlFile</param-name>
    <param-value>/WEB-INF/proxool.xml</param-value> 
   </context-param>
  <listener>
    <listener-class>com.xtlh.qdbridge.util.ProxoolListener</listener-class>
  </listener>

 

监听器类如下:

import java.io.File;  
import java.util.Enumeration;  
import java.util.Properties;  
 
import javax.servlet.ServletContext;  
import javax.servlet.ServletContextEvent;  
import javax.servlet.ServletContextListener;  
 
import org.apache.commons.logging.Log;  
import org.apache.commons.logging.LogFactory;  
import org.logicalcobwebs.proxool.ProxoolException;  
import org.logicalcobwebs.proxool.configuration.JAXPConfigurator;  
import org.logicalcobwebs.proxool.configuration.PropertyConfigurator;  

public class ProxoolListener implements ServletContextListener
{
 private static final Log LOG = LogFactory.getLog(ProxoolListener.class);  
    private static final String XML_FILE_PROPERTY = "xmlFile";  
    private static final String PROPERTY_FILE_PROPERTY = "propertyFile";  
    private static final String AUTO_SHUTDOWN_PROPERTY = "autoShutdown";  
    @SuppressWarnings("unused")  
    private boolean autoShutdown = true;  
      
    public void contextDestroyed(ServletContextEvent arg0){  
         System.out.println("destroy database pool....");  
     }  
 
    public void contextInitialized(ServletContextEvent contextEvent){  
         ServletContext context = contextEvent.getServletContext(); //对应servlet的init方法中ServletConfig.getServletContext()  
         String appDir = contextEvent.getServletContext().getRealPath("/");  
         Properties properties = new Properties();  
 
         Enumeration names = context.getInitParameterNames();  
        while (names.hasMoreElements()) {  
             String name = (String) names.nextElement();  
             String value = context.getInitParameter(name);  
 
            if (name.equals(XML_FILE_PROPERTY)) {  
                try {  
                     File file = new File(value);  
                    if (file.isAbsolute()) {  
                         JAXPConfigurator.configure(value, false);  
                     } else {  
                         JAXPConfigurator.configure(appDir + File.separator + value, false);  
                     }  
                 } catch (ProxoolException e) {  
                     LOG.error("Problem configuring " + value, e);  
                 }  
             } else if (name.equals(PROPERTY_FILE_PROPERTY)) {  
                try {  
                     File file = new File(value);  
                    if (file.isAbsolute()) {  
                         PropertyConfigurator.configure(value);  
                     } else {  
                         PropertyConfigurator.configure(appDir + File.separator + value);  
                     }  
                 } catch (ProxoolException e) {  
                     LOG.error("Problem configuring " + value, e);  
                 }  
             } else if (name.equals(AUTO_SHUTDOWN_PROPERTY)) {  
                 autoShutdown = Boolean.valueOf(value).booleanValue();  
             } else if (name.startsWith("jdbc")) { //此处以前是PropertyConfigurator.PREFIX改为jdbc,因为此源码是0.9.1版本的,与0.9RC3版本有点不一样  
                 properties.setProperty(name, value);  
             }  
         }  
 
        if (properties.size() > 0) {  
            try {  
                 PropertyConfigurator.configure(properties);  
             } catch (ProxoolException e) {  
                 LOG.error("Problem configuring using init properties", e);  
             }  
         }  
     }  

}

 

最后一步:整合spring和proxool。在applicationContext.xml文件中把原来数据源的配置成这样:

 

<!-- 引入proxool.xml文件,proxool-0.9.1.jar包和proxool-cglib.jar  -->
  <!-- 配置数据源 -->
 <bean id="dataSource"  class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
        <property name="driverClassName">
         <!-- 将数据库连接交给了proxool管理,使它的驱动 --> 
         <value>org.logicalcobwebs.proxool.ProxoolDriver</value> 
        </property>
        <property name="url"> 
            <!-- 数据库连接池的别名,与你的proxool.xml中的Alias必须一致 --> 
            <value>proxool.dbPool</value> 
        </property> 
 </bean>

 

这样,就一切ok了。

 

 

分享到:
评论

相关推荐

    SSH (Struts2+Spring3+Hibernate3) +Proxool_亲测成功 费大劲了.zip

    另一份文件`spring中以dataSource方式使用proxool连接池_2种方式.txt`可能详细介绍了两种在Spring中配置Proxool连接池的方法。通常,可以通过XML配置或Java配置来设置数据源。在XML配置中,可以使用`...

    struts2.2.3+spring2.5.6+hibernate3.2+proxool0.9.1

    这包括Struts2的动作映射、Spring的依赖注入、Hibernate的数据持久化,以及Proxool的连接池管理。通过深入研究这些文件,开发者能够提升自己在Java Web开发中的技能,特别是在企业级应用中整合多个框架的能力。

    Struts2 + Spring 2.5 + Hibernate 3.3 整合(实际使用项目,version1)

    proxool(据说是dbcp和c3p0三者中最优秀的)做连接池;使用jquery的ajax实现仿google人名自动补全;头像上传剪切压缩处理。 包含有完整的jar包和源代码,这是专门为我们实验室定制开发的,包含了架构基于s2sh技术...

    struts2+spring+hibernate整合

    在`applicationContext.xml`中,定义了一个`ProxoolDataSource` bean,这是基于Proxool的数据库连接池。配置了数据库驱动、URL、用户名、密码等参数,以及连接池的属性如最大连接数、最小连接数和睡眠时间等。这段...

    Struts2 + Spring3 + Hibernate3.5 整合(集成测试配套jar包更新构建脚本使用说明)

    proxool(据说是dbcp和c3p0三者中最优秀的)做连接池;使用jquery的ajax实现仿google人名自动补全;头像上传剪切压缩处理。 包含有完整的jar包和源代码,可以直接下载编译部署和运行,这是专门为我们实验室定制开发...

    SSH2全注解整合(spring2.5+hibernate3.3+struts2.1+泛型DAO+proxool连接池)

    Proxool连接池是一种数据库连接池实现,它能够有效地管理和复用数据库连接,提高系统性能,减少数据库资源的消耗。在SSH整合中,Proxool可以通过Spring的配置来管理,通过设置相关属性,如poolName、driverSource、...

    Struts2 + Spring3 + Hibernate3.5 整合(实际使用项目,version2)

    proxool(据说是dbcp和c3p0三者中最优秀的)做连接池;使用jquery的ajax实现仿google人名自动补全;头像上传剪切压缩处理。 包含有完整的jar包和源代码,可以直接下载编译部署和运行,这是专门为我们实验室定制开发...

    Struts2 Spring3 Hibernate2 JPA2 Proxool连接池

    本项目采用Struts2、Hibernate3集成JPA2、Spring3和Proxool连接池的集成,对整体SSH框架的数据访问及网站效率都有较大的提升,本项目即时部署即可使用,既满足新手的学习,也对有深层研究的朋友有帮助。

    spring3+hibernate3+proxool+mysql 超级企业J2EE DEMO(jar在下一个文件中,jar太大了)

    本项目采用当前主流的MVC和IOC框架spring 3、优秀的ORM框架hibernate和超级厉害的proxool数据库连接池。这个工程demo,是本人在企业应用中的项目缩影,绝对实用于企业的应用。 适合朋友: 1.一直用单独的servlet和...

    Spring+proxool+hibernate+struts2+aop_Jar包

    2. **Proxool连接池**:Proxool是一个轻量级的数据库连接池,它可以有效地管理和复用数据库连接,减少创建和销毁连接的开销,提高系统的性能。Proxool提供监控和统计信息,便于开发者了解数据库连接的使用情况,优化...

    Spring+proxool+hibernate+struts2+aop整合的完整的简单项目

    2. **Proxool连接池**:Proxool是一个轻量级数据库连接池,它能有效地管理和复用数据库连接,提高系统性能,避免因频繁创建和销毁连接导致的资源浪费。在Spring中,通过配置Proxool的属性,如最大连接数、超时时间等...

    Struts2 + Spring3 + Hibernate3.5 整合(实际使用项目,version3).part1

    proxool(据说是dbcp和c3p0三者中最优秀的)做连接池;使用jquery的ajax实现仿google人名自动补全;头像上传剪切压缩处理。 包含有完整的jar包和源代码,可以直接下载编译部署和运行,这是专门为我们实验室定制开发...

    proxool连接池用户名密码加密

    2. **使用说明**:这份文档详细阐述了如何在Proxool连接池配置中使用加密的用户名和密码。它可能涵盖了以下步骤: - **加密过程**:说明如何使用提供的jar文件对数据库的用户名和密码进行加密,生成可以安全存储的...

    Struts2+Spring3+HibernateBBS源码lib2.rar

    - `jboss-jmx.jar`, `jboss-common.jar`, `jboss-cache.jar`, `proxool-0.8.3.jar`:这些是JBoss服务器相关的库,可能用于提供管理和缓存服务,Proxool是一个连接池,用于高效管理数据库连接。 通过这些库,开发者...

    Extjs3.2+struts2.0+spring2.5+hibernate3.5+weblogic10+oracle10g含全包5

    proxool_cofig.xml为连接池配置 此项目可做基础项目开发原型方便,启动此项目在weblogic10中会有antlr-2.7.6rc1.jar此包的异常请配置其先加载并将次包考入 bea\wlserver_10.0\server\lib目录下,再将bea\user_projects...

    Struts2 + Spring3 + Hibernate3.5 整合(实际使用项目,version3).part3

    proxool(据说是dbcp和c3p0三者中最优秀的)做连接池;使用jquery的ajax实现仿google人名自动补全;头像上传剪切压缩处理。 包含有完整的jar包和源代码,可以直接下载编译部署和运行,这是专门为我们实验室定制开发...

    truts2+hibernate3.2+spring2.5 proxool成步骤

    同时,我们需要导入Proxool连接池的相关库,包括`proxool-0.9.1.jar`,`proxool-cglib.jar`,以及对应的数据库驱动包(这里是`mysql-connector-java-5.0.8-bin.jar`)。 在项目中,我们需要创建一个名为`jdbc....

    基于ssh的proxool连接池配置

    总之,基于SSH的Proxool连接池配置涉及到Spring、Hibernate和Proxool之间的协作,通过这种方式,我们可以有效地管理和优化数据库连接,提高应用程序的性能和稳定性。在实际开发中,需要根据项目需求调整配置参数,以...

    struts2+hibernate3.2+spring2.5集成步骤

    在IT行业中,集成Struts2、Hibernate3.2和Spring2.5这三大框架是构建高效、可维护的企业级Web应用程序的常见选择。这三者分别负责MVC(Model-View-Controller)架构中的表现层、持久化层和业务逻辑层的管理。下面将...

Global site tag (gtag.js) - Google Analytics