数据库链接池的配置

 

目前数据库链接池产品是很是多的,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却忘记关闭了这样的信息,在调试的时候颇有用。
基本配置以下: html

Java代码   收藏代码
  1. <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
  2. <property name="driverClassName" value="${db.driverClassName}"/>  
  3. <property name="url" value="${db.url}"/>  
  4. <property name="username" value="${db.username}"/>  
  5. <property name="password" value="${db.password}"/>  
  6. <!--initialSize: 初始化链接-->  
  7. <property name="initialSize" value="5"/>  
  8. <!--maxIdle: 最大空闲链接-->  
  9. <property name="maxIdle" value="10"/>  
  10. <!--minIdle: 最小空闲链接-->  
  11. <property name="minIdle" value="5"/>  
  12. <!--maxActive: 最大链接数量-->  
  13. <property name="maxActive" value="15"/>  
  14. <!--removeAbandoned: 是否自动回收超时链接-->  
  15. <property name="removeAbandoned" value="true"/>  
  16. <!--removeAbandonedTimeout: 超时时间(以秒数为单位)-->  
  17. <property name="removeAbandonedTimeout" value="180"/>  
  18. <!--maxWait: 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒-->  
  19. <property name="maxWait" value="3000"/>  
  20. <property name="validationQuery">  
  21. <value>SELECT 1</value>  
  22. </property>  
  23. <property name="testOnBorrow">  
  24. <value>true</value>  
  25. </property>  
  26. </bean>  

C3P0mysql



  C3P0受到很多人的推荐,官方地址是:http://sourceforge.net/projects/c3p0。基本配置以下:web


Java代码   收藏代码
  1. <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">  
  2.   <property name="driverClass" value="${db.driverClassName}"/>  
  3.   <property name="jdbcUrl" value="${db.url}"/>  
  4. <!--  
  5.   <property name="user" value="${db.user}"/>  
  6.   <property name="password" value="${db.pass}"/>  
  7. -->  
  8.   <property name="properties">  
  9.     <props>  
  10.       <!--当链接池中的链接耗尽的时候c3p0一次同时获取的链接数。Default: 3-->  
  11.       <prop key="c3p0.acquire_increment">5</prop>  
  12.       <!--每60秒检查全部链接池中的空闲链接。Default: 0 -->   
  13.       <prop key="c3p0.idle_test_period">60</prop>  
  14.       <prop key="c3p0.max_size">15</prop>  
  15.       <prop key="c3p0.max_statements">0</prop>  
  16.       <prop key="c3p0.min_size">10</prop>  
  17.       <prop key="user">${db.user}</prop>  
  18.       <prop key="password">${db.pass}</prop>  
  19.     </props>  
  20.   </property>  
  21. </bean>  

Proxoolspring



  这是一个Java SQL Driver驱动程序,能够透明地为你现存的JDBC驱动程序增长链接池的功能。另外它提供一个Web监控程序,能够实时的查看你系统全部链接池的使用情 况。官方地址:http://proxool.sourceforge.net。Proxool的配置方式有多种,相似于以上配置的方式以下:sql


Java代码   收藏代码
  1. <bean id="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource" destroy-method="close">  
  2.   <property name="driver" value="${db.driverClassName}"/>  
  3.   <property name="driverUrl" value="${db.url}"/>  
  4.  <!--用户名和密码写在一块儿才调用成功,否则会报 调用无效的参数 错误,下面设置用户名和密码的property好像是无效的,其它数据库也是这样  
  5.  好比mysql的也要把用户名和密码写在url里:<property name="driverUrl" value="jdbc:mysql://localhost:3306/blogdb?user=lizongbo&amp;password=lizongbo" />  
  6.  -->  
  7.   <property name="user" value="${db.user}"/>  
  8.   <property name="password" value="${db.pass}"/>  
  9.   <property name="alias" value="${db.alias}"/>  
  10.   <property name="houseKeepingSleepTime" value="90000"/>  
  11.   <property name="prototypeCount" value="5"/>  
  12.   <property name="maximumConnectionCount" value="100"/>  
  13.   <property name="minimumConnectionCount" value="10"/>  
  14.   <property name="trace" value="true"/>  
  15.   <property name="verbose" value="true"/>  
  16. </bean>  

另外,也能够在单独的一个文件中配置Proxool。好比,在WEB-INF/下创建proxool.xml文件:数据库


Java代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <proxool-config>  
  3.   <proxool>  
  4.     <alias>mimir</alias>  
  5.     <driver-url>jdbc:mysql://localhost:3306/dbname?user=username&amp;password= password"</driver-url>  
  6.     <driver-class>com.mysql.jdbc.Driver</driver-class>  
  7.     <driver-properties>  
  8.       <property name="user" value="username"/>  
  9.       <property name="password" value="password"/>  
  10.     </driver-properties>  
  11.     <maximum-connection-count>10</maximum-connection-count>  
  12.     <house-keeping-test-sql>select 1 from dual</house-keeping-test-sql>  
  13.   </proxool>  
  14. </proxool-config>  

而后,须要在应用系统启动时读入这个文件。Proxool提供了一个Servlet来作这个事情,编辑WEB-INF/web.xml,加入如下几行:apache


Java代码   收藏代码
  1. <servlet>  
  2.   <servlet-name>proxoolServletConfigurator</servlet-name>  
  3.   <servlet-class>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class>  
  4.   <init-param>  
  5.     <param-name>xmlFile</param-name>  
  6.     <param-value>WEB-INF/proxool.xml</param-value>  
  7.   </init-param>  
  8.   <load-on-startup>1</load-on-startup>  
  9. </servlet>  

而后,在Spring的配置中能够这样写:服务器


Java代码   收藏代码
  1. <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
  2.   <property name="driverClassName" value="org.logicalcobwebs.proxool.ProxoolDriver"/>  
  3.   <property name="url" value="proxool.xxx"/>  
  4. </bean>  

若是须要监控,能够在WEB-INF/web.xml中加上:app


Java代码   收藏代码
  1. <servlet>  
  2.   <servlet-name>proxooladmin</servlet-name>  
  3.   <servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class>  
  4. </servlet>  
  5. <servlet-mapping>  
  6.   <servlet-name>proxooladmin</servlet-name>  
  7.   <url-pattern>/proxooladmin</url-pattern>  
  8. </servlet-mapping> 
相关文章
相关标签/搜索