`

数据库连接池优化与配置

    博客分类:
  • Web
阅读更多
概述

  目前数据库连接池产品是非常多的,DBCP、C3P0、Proxool等都是非常优秀的产品。连接池的性能和稳定性会对我们的程序造成极大的影响,因此,有必要对这些连接池产品进行一些选择。另外,连接池的配置是否恰当,将会决定该连接池的性能和稳定性表现,所以,本文将给出连接池配置的一些要点。在这些连接池产品中作出选择是比较困难的,每个优秀的产品都有它自身的特点,而且也很难找出一个在各种运行环境中都最表现最优的产品,因此,本文将选出一些目前来说比较优秀的产品,简要介绍一下它们的配置要点,以及如何使用在我们的项目中。至于在生产环境中,哪种产品会表现最好,则...。

  Hibernate开发组推荐使用c3p0,spring开发组推荐使用dbcp(dbcp连接池有weblogic连接池同样的问题,就是强行关闭连接或数据库重启后,无法reconnect,但可通过配置来解决),Hibernate in action推荐使用c3p0和proxool。其它还有不少商业产品,但性能与稳定性的整体表现反而不如这些开源数据库连接池。从网上的搜索情况来看,也是DBCP、C3P0、Proxool的使用较为广泛。但是关于它们的性能与稳定性,众说不一,难以得到结论。
  DBCP是Apache出品的,开发也较为活跃,也是使用极为广泛的一个数据库连接池产品。从网上搜索的资料以及自己以往使用DBCP的经验来看,DBCP的稳定性有些问题。但是它的开发较为活跃,所以我们可以相信它会解决这些问题,而且有些问题是可以通过额外的配置来解决的。
  C3P0,稳定性似乎不错,在这方面似乎有很好的口碑。至于性能,应该不是最好的,算是中规中矩的类型。
  Proxool的口碑似乎很好,不大见到负面的评价,从官方资料上来看,有许多有用的特性和特点,也是许多人推荐的。但是开发不够活跃,使用者也较少。
  我选定这三个产品作为我们系统的数据库连接池,并使用Proxool作为目前开发环境中的连接池产品(Proxool便于监控)。
使用和配置

使用

  三个产品都能很方便地整合到Springframework中,也都可以配置为JNDI资源,因此,它们可以随意更换,不会影响程序代码。在生产环境中,如果需要开放我们的数据库给其它系统使用或共享,我推荐使用应用服务器的JNDI。在开发环境中,我们不使用JNDI。以下的配置是不使用JNDI时的Spring配置,至于JNDI的配置,请参考相关文档,该文不做叙述,但配置项基本相同。
DBCP

  DBCP是Apache的一个开源项目(http://jakarta.apache.org/commons/dbcp/index.html),它依赖Apache的另外2个开源项目:commons.collections和commons.pool。下载这些包并将这些包的路径添加到classpath中就可以使用dbcp做为项目中的数据库连接池使用了。在我们的项目中,可通过Maven来管理。
  在配置时,不常用但在生产环境中很有用的参数有:removeAbandoned 、removeAbandonedTimeout、maxWait。如果设置了rmoveAbandoned=true,那么在getNumActive()快要到getMaxActive()的时候,系统会进行无效的Connection的回收,回收的 Connection为removeAbandonedTimeout(默认300秒)中设置的秒数后没有使用的Connection。
  如果设置了logAbandoned=true,DBCP将会在回收Connection之后,打印回收Connection的错误信息,包括在哪个地方用了Connection却忘记关闭了这样的信息,在调试的时候很有用。
  基本配置如下:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${db.driverClassName}"/>
<property name="url" value="${db.url}"/>
<property name="username" value="${db.username}"/>
<property name="password" value="${db.password}"/>
<!--initialSize: 初始化连接-->
<property name="initialSize" value="5"/>
<!--maxIdle: 最大空闲连接-->
<property name="maxIdle" value="10"/>
<!--minIdle: 最小空闲连接-->
<property name="minIdle" value="5"/>
<!--maxActive: 最大连接数量-->
<property name="maxActive" value="15"/>
<!--removeAbandoned: 是否自动回收超时连接-->
<property name="removeAbandoned" value="true"/>
<!--removeAbandonedTimeout: 超时时间(以秒数为单位)-->
<property name="removeAbandonedTimeout" value="180"/>
<!--maxWait: 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒-->
<property name="maxWait" value="3000"/>
<property name="validationQuery">
<value>SELECT 1</value>
</property>
<property name="testOnBorrow">
<value>true</value>
</property>
</bean>

C3P0

  C3P0受到不少人的推荐,官方地址是:http://sourceforge.net/projects/c3p0。基本配置如下:
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
  <property name="driverClass" value="${db.driverClassName}"/>
  <property name="jdbcUrl" value="${db.url}"/>
<!--
  <property name="user" value="${db.user}"/>
  <property name="password" value="${db.pass}"/>
-->
  <property name="properties">
    <props>
      <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3-->
      <prop key="c3p0.acquire_increment">5</prop>
      <!--每60秒检查所有连接池中的空闲连接。Default: 0 --> 
      <prop key="c3p0.idle_test_period">60</prop>
      <prop key="c3p0.max_size">15</prop>
      <prop key="c3p0.max_statements">0</prop>
      <prop key="c3p0.min_size">10</prop>
      <prop key="user">${db.user}</prop>
      <prop key="password">${db.pass}</prop>
    </props>
  </property>
</bean>

Proxool

  这是一个Java SQL Driver驱动程序,可以透明地为你现存的JDBC驱动程序增加连接池的功能。另外它提供一个Web监控程序,可以实时的查看你系统所有连接池的使用情况。官方地址:http://proxool.sourceforge.net。Proxool的配置方式有多种,类似于以上配置的方式如下:
<bean id="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource" destroy-method="close">
  <property name="driver" value="${db.driverClassName}"/>
  <property name="driverUrl" value="${db.url}"/>
 <!--用户名和密码写在一起才调用成功,不然会报 调用无效的参数 错误,下面设置用户名和密码的property好像是无效的,其它数据库也是这样
 比如mysql的也要把用户名和密码写在url里:<property name="driverUrl" value="jdbc:mysql://localhost:3306/blogdb?user=lizongbo&amp;password=lizongbo" />
 -->
  <property name="user" value="${db.user}"/>
  <property name="password" value="${db.pass}"/>
  <property name="alias" value="${db.alias}"/>
  <property name="houseKeepingSleepTime" value="90000"/>
  <property name="prototypeCount" value="5"/>
  <property name="maximumConnectionCount" value="100"/>
  <property name="minimumConnectionCount" value="10"/>
  <property name="trace" value="true"/>
  <property name="verbose" value="true"/>
</bean>

  另外,也可以在单独的一个文件中配置Proxool。比如,在WEB-INF/下建立proxool.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<proxool-config>
  <proxool>
    <alias>mimir</alias>
    <driver-url>jdbc:mysql://localhost:3306/dbname?user=username&amp;password= password"</driver-url>
    <driver-class>com.mysql.jdbc.Driver</driver-class>
    <driver-properties>
      <property name="user" value="username"/>
      <property name="password" value="password"/>
    </driver-properties>
    <maximum-connection-count>10</maximum-connection-count>
    <house-keeping-test-sql>select 1 from dual</house-keeping-test-sql>
  </proxool>
</proxool-config>

  然后,需要在应用系统启动时读入这个文件。Proxool提供了一个Servlet来做这个事情,编辑WEB-INF/web.xml,加入以下几行:
<servlet>
  <servlet-name>proxoolServletConfigurator</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>

  然后,在Spring的配置中可以这样写:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
  <property name="driverClassName" value="org.logicalcobwebs.proxool.ProxoolDriver"/>
  <property name="url" value="proxool.xxx"/>
</bean>

  如果需要监控,可以在WEB-INF/web.xml中加上:
<servlet>
  <servlet-name>proxooladmin</servlet-name>
  <servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>proxooladmin</servlet-name>
  <url-pattern>/proxooladmin</url-pattern>
</servlet-mapping>
分享到:
评论

相关推荐

    基于XML 的自优化数据库连接池的设计与实现

    提出一种自优化数据库连接池的设计方式。它可根据应用规模动态地调整设置参数, 进而选取对应的 管理策略, 其中策略可以存储在连接池的配置文件中或作为知识库保存。在对连接资源进行有效管理的同时, 可以对...

    数据库连接池的配置 完整版

    里面总共包含三个配置文件xxx.xml和一个说明文档,手把手教你如何配置数据库连接池,按照说明文档操作完全没问题。

    R2高性能数据库连接池v1.5源码

    v1.2处理了oracle环境下由于服务器关闭休眠链接造成的连接池循环检测进程异常退出的情况,改为当循环周期大于服务器关闭休眠链接间隔时,后台打印异常并重新连接数据库。 R2 jdbc连接池,用于java程序中jdbc连接池的...

    jdbc连接池配置(优化连接速度)

    jdbc数据库连接池,方便连接数据库,优化数据库连接速度。

    JSP数据库连接池的研究与实现(源代码+论文).rar

    JSP数据库连接池的研究与实现(源代码+论文).rar是一个针对Java Server Pages (JSP) 技术开发者的宝贵资源包,它旨在通过提供一套完整的解决方案来优化Web应用程序中的数据库连接管理。在动态网站和应用程序中,...

    配置文件连接数据库和优化数据库的连接池

    配置文件连接数据库和优化数据库的连接池,一个简单的测试

    【spring-boot-seckill分布式秒杀系统 v1.0】从0到1构建的java秒杀系统源码+安装说明

    spring-boot-seckill分布式秒杀系统是一个用SpringBoot开发的从0到1构建的分布式秒杀系统,项目案例基本成型,逐步完善中。...3、应用服务优化:Nginx最佳配置、Tomcat连接池优化、数据库配置优化、数据库连接池优化。

    论文研究-基于XML的自优化数据库连接池的设计与实现.pdf

    提出一种自优化数据库连接池的设计方式。它可根据应用规模动态地调整设置参数,进而选取对应的管理策略,其中策略可以存储在连接池的配置文件中或作为知识库保存。在对连接资源进行有效管理的同时,可以对连接池的...

    R2高性能数据库连接池v1.6源码

    v1.2处理了oracle环境下由于服务器关闭休眠链接造成的连接池循环检测进程异常退出的情况,改为当循环周期大于服务器关闭休眠链接间隔时,后台打印异常并重新连接数据库。 R2 jdbc连接池,用于java程序中jdbc连接池...

    R2高性能数据库连接池v1.8改进版源码

    v1.2处理了oracle环境下由于服务器关闭休眠链接造成的连接池循环检测进程异常退出的情况,改为当循环周期大于服务器关闭休眠链接间隔时,后台打印异常并重新连接数据库。 R2 jdbc连接池,用于java程序中jdbc连接池的...

    R2高性能数据库连接池v1.7源码

    v1.2处理了oracle环境下由于服务器关闭休眠链接造成的连接池循环检测进程异常退出的情况,改为当循环周期大于服务器关闭休眠链接间隔时,后台打印异常并重新连接数据库。 R2 jdbc连接池,用于java程序中jdbc连接池的...

    R2高性能数据库连接池v1.8源码

    v1.2处理了oracle环境下由于服务器关闭休眠链接造成的连接池循环检测进程异常退出的情况,改为当循环周期大于服务器关闭休眠链接间隔时,后台打印异常并重新连接数据库。 R2 jdbc连接池,用于java程序中jdbc连接池的...

    weblogic中sqlserver连接池的配置.rar

    weblogic中,如何配置各种数据库的连接池

    ADO.NET中SQLServer数据库连接池

    为了使打开的连接成本最低,ADO.NET使用称为连接池的优化方法。连接池减少新连接需要打开的次数。池进程保持物理连接的所有权。通过为每个给定的连接配置保留一组活动连接来管理连接。只要用户在连接上调用Open,池...

    JDBC连接MySQL数据库实现增删改查(Dao层实现 解决硬编码 配置连接池获得连接对象 )

    工具类 JDBCUtil.java(抽取公共部分,解决硬编码问题 DBCP方式实现连接池、配置连接池 ==&gt; 获得连接对象连接数据库) 用户账号实体类 User.java(私有化数据库t_user表中的id,username,password) 接口类 ...

    Jboss + 优化配置

    Jboss + 优化配置 Jboss内存优化 Jboss数据库连接池优化 Jboss部署目录优化 Jboss应用安全加固

    深入探索MyBatis:全局配置文件解析及应用优化策略

    MyBatis配置文件主要包含数据库连接池配置、SQL语句映射、类型别名定义、插件配置等核心部分。文档首先阐述了MyBatis相较于传统JDBC的优势,如简化数据库操作、提高代码可维护性,并通过配置文件将SQL与Java代码分离...

    weblogic10.3性能优化参数配置

    一、Weblogic服务程序设置: 1、设置JDK内存: 2、设置线程数: 3、Weblogic数据库连接池连接数设置: 4、Weblogic的服务设置[配置\优化]:

    JBOSS优化配置

    JBOSS优化配置/内存优化/Jboss日志输出模式/Jboss数据库连接池优化/ Jboss部署目录优化

Global site tag (gtag.js) - Google Analytics