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

Spring3.1.2框架下c3po和dbcp两种数据库连接池的配置

2013-03-18 14:54 387 查看
在hibernate和spring的框架中经常会用到c3pO数据库连接池,这里自己理解一下c3pO,首先它是一个开源的JDBC的连接池,实现了数据源和JNDI绑定,支持JDBC3 规范和JDBC2的标准扩展。
首先我们要在项目中引c3pO-0.9.1.2jar包 
比如我自己项目的Spring3.0的框架中上下文XML的配置中,配置如下:连接oracle数据库的例子 

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-
method="close" lazy-init="false">
<property name="driverClass" value="oracle.jdbc.driver.OracleDriver"/>
<property name="jdbcUrl" value="jdbc:oracle:thin:@192.168.78.68:1521:ora10g"/>
<property name="user" value="bankday" />
<property name="password" value="m123456" />
<property name="testConnectionOnCheckin" value="true" />
<property name="automaticTestTable" value="TestTable" />
<property name="idleConnectionTestPeriod" value="18000" />
<property name="maxIdleTime" value="25000" />
<property name="testConnectionOnCheckout" value="true" />
</bean>
其中属性testConnectionOnCheckin设置为true的话,在取得连接的同时将校验连接的有效性,默认为false。
属性automaticTestTable表示c3p0将建一张名为TestTable的空表,并使用其自带的查询语句进行测试。如果定义了这个参数那么属性preferredTestQuery将被忽略。你不能在这张TestTable表上进行任何操作,它将只供c3p0测试使用。Default:
null 

其中属性idleConnectionTestPeriod 表示每18000秒检查所有连接池中的空闲连接。Default: 0  
属性 maxIdleTime表示最大空闲时间,25000秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0  

属性testConnectionOnCheckout的意义在于:因性能消耗大请只在需要的时候使用它。如果设为true那么在每个connection提交的时候都将校验其有效性。建议使用idleConnectionTestPeriod或automaticTestTable 等方法来提升连接测试的性能。Default:
false  

这里要特别注意一个问题,在同一个tomcat下两个web应用程序都使用了c3p0的ComboPooledDataSource,导致启动的收出一个警告,说"A
C3P0Registry mbean is already registered"或者“com.machange.v2.c3pO:type=c3pORegistry”。有两个解决办法,一是把c3p0 jars和数据库的驱动jar移到tomcat
common lib下。 

另外一个就是根据官方文档所说: 
If you do not want c3p0 to register MBeans with your JMX environment, you can suppress  this behavior with the following,
set either as a System property or in  c3p0.properties: 

也就是加上一个c3p0.properties属性文件:内容为 
com.mchange.v2.c3p0.management.ManagementCoordinator=com.mchange.v2.c3p0.management.NullManagementCoordinator 
就可以解决问题 

这里也比较一下spring的第三方依赖包中另一种数据源的实现,就是Apache的DBCP,项目中需要 commons-dbcp.jar和commons-pool.jar两个包。一个是项目的application.properties配置文件,里面是数据库的连接信息。

jdbc.driver=com.mysql.jdbc.Driver
useUnicode=true&characterEncoding=utf-8
jdbc.url=jdbc:mysql://localhost:3306/db01?characterEncoding=utf-8
jdbc.username=root
jdbc.password=123456
devModel=true
server.node_name=default
server.addr=localhostH
在spring的上下文的配置中: 
<context:property-placeholder ignore-unresolvable="true"

location="classpath*:/application.properties"/>

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"

destroy-method="close">
<!-- Connection Info -->
<property name="driverClassName" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.pas
a042
sword}" />

<!-- Connection Pooling Info -->
<property name="defaultAutoCommit" value="false" />
<!-- 连接Idle一个小时后超时 -->
<property name="timeBetweenEvictionRunsMillis" value="3600000" />
<property name="minEvictableIdleTimeMillis" value="3600000" />
</bean>
其中属性:minEvictableIdleTimeMillis  :连接池中连接,在时间段内一直空闲, 被逐出连接池的时间。

这里两种数据源的连接的属性,只是根据我自己的需要解释了一些,其他的可以搜索他们两者的区别,一直配置写法上一些细微的区别,而是c3pO也在配置属性上比dbcp更加的丰富些,到此spring框架下常用的两种数据源的连接池配置就到这里。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: