一般而言,常用的数据库连接池有DBCP,C3P0, proxool,另外还有一个出道迟一些但是性能比前面这3个又好许多的连接池BoneCp。
DBCP是apache组织的一个开源的连接池项目,不过现在好像已经停止维护了,据说问题比较多,连接死锁问题比较严重。
C3P0是hibernate官方指定的数据库连接池工具,性能稳定,不过占用资源相对较多。
Proxool据说性能比从C3P0好一些,消耗资源也少。
BoneCp连接池 网上有测试数据显示其运行效率可以达到C3P0、Proxool的25倍,并且稳定性也不错,所以被许多开发者推崇!但是要求jdk1.5+。
只可惜我的开发环境是基于jdk1.4的,所以对BoneCp无法测试了。
Proxool也没有测试,因为现在基本都是新的基于jdk1.5+的版本。
DBCP连接池配置:
- <bean id="dataSource"
- class="org.apache.commons.dbcp.BasicDataSource"
- destroy-method="close">
- <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
- <property name="url" value="jdbc:mysql://192.168.0.109:3306/test?useUnicode=true&characterEncoding=UTF-8"/>
- <property name="username" value="root"/>
- <property name="password" value="root"/>
- <!--maxActive: 最大连接数量-->
- <property name="maxActive" value="150"/>
- <!--minIdle: 最小空闲连接-->
- <property name="minIdle" value="5"/>
- <!--maxIdle: 最大空闲连接-->
- <property name="maxIdle" value="20"/>
- <!--initialSize: 初始化连接-->
- <property name="initialSize" value="30"/>
- <!-- 连接被泄露时是否打印 -->
- <property name="logAbandoned" value="true"/>
- <!--removeAbandoned: 是否自动回收超时连接-->
- <property name="removeAbandoned" value="true"/>
- <!--removeAbandonedTimeout: 超时时间(以秒数为单位)-->
- <property name="removeAbandonedTimeout" value="10"/>
- <!--maxWait: 超时等待时间以毫秒为单位 1000等于60秒-->
- <property name="maxWait" value="1000"/>
- <!-- 在空闲连接回收器线程运行期间休眠的时间值,以毫秒为单位. -->
- <property name="timeBetweenEvictionRunsMillis" value="10000"/>
- <!-- 在每次空闲连接回收器线程(如果有)运行时检查的连接数量 -->
- <property name="numTestsPerEvictionRun" value="10"/>
- <!-- 1000 * 60 * 30 连接在池中保持空闲而不被空闲连接回收器线程-->
- <property name="minEvictableIdleTimeMillis" value="10000"/>
- <property name="validationQuery" value="SELECT NOW() FROM DUAL"/>
- </bean>
C3P0连接池配置:
<beanid="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"destroy-method="close">
<propertyname="driverClass" value="oracle.jdbc.OracleDriver"/>
<propertyname="jdbcUrl" value="jdbc:oracle:thin:@168.9.202.49:1521:TEST"/>
<propertyname="user" value="TEST" />
<propertyname="password" value="TEST" />
<propertyname="acquireIncrement" value="5" />
<propertyname="acquireRetryAttempts" value="10" />
<propertyname="acquireRetryDelay" value="3000" />
<propertyname="autoCommitOnClose" value="true" />
<propertyname="breakAfterAcquireFailure" value="false"/>
<propertyname="checkoutTimeout"value="10000" />
<propertyname="initialPoolSize"value="6" />
<propertyname="maxIdleTime" value="10000" />
<propertyname="maxPoolSize" value="10" />
<propertyname="minPoolSize" value="1" />
<propertyname="maxStatements" value="0" />
<propertyname="numHelperThreads"value="3" />
<propertyname="propertyCycle" value="600" />
<propertyname="maxStatementsPerConnection" value="0" />
</bean>
Proxool连接池配置:
<bean id="dataSource"class="org.logicalcobwebs.proxool.ProxoolDataSource"destroy-method="close">
<propertyname="driver" value="oracle.jdbc.driver.OracleDriver"></property>
<propertyname="driverUrl" value="jdbc:oracle:thin:@168.9.202.49:1521:TEST"></property>
<propertyname="user" value="TEST"></property>
<propertyname="password" value="TEST"></property>
<propertyname="alias" value="proxool4JMJL"></property>
<propertyname="jmx" value="false"></property>
<propertyname="trace" value="true"></property>
<propertyname="verbose" value="false"></property>
<propertyname="houseKeepingSleepTime" value="30000"></property>
<propertyname="houseKeepingTestSql" value="SELECTCURRENT_DATE FROM DUAL"></property>
<propertyname="testBeforeUse" value="true"></property>
<propertyname="testAfterUse" value="true"></property>
<propertyname="prototypeCount" value="5"></property>
<propertyname="maximumConnectionCount"value="400"></property>
<propertyname="minimumConnectionCount"value="10"></property>
<propertyname="statistics" value="1m,15m,1d"></property>
<propertyname="statisticsLogLevel" value="ERROR"></property>
<propertyname="maximumActiveTime" value="600000"></property>
<propertyname="simultaneousBuildThrottle" value="1600"></property>
</bean>
Bonecp连接池配置:
<bean id="bonecpDataSource"class="com.jolbox.bonecp.BoneCPDataSource"destroy-method="close">
<propertyname="driverClass" value=" oracle.jdbc.driver.OracleDriver " />
<propertyname="jdbcUrl" value=" jdbc:oracle:thin:@168.9.202.49:1521:TEST" />
<propertyname="username" value="TEST"/>
<propertyname="password" value="TEST"/>
<propertyname="idleConnectionTestPeriod" value="60"/>
<propertyname="idleMaxAge" value="240"/>
<propertyname="maxConnectionsPerPartition" value="30"/>
<propertyname="minConnectionsPerPartition" value="10"/>
<propertyname="partitionCount" value="3"/>
<propertyname="acquireIncrement" value="5"/>
<propertyname="statementsCacheSize" value="100"/>
<propertyname="releaseHelperThreads" value="3"/>
</bean>
在实际项目开发中一般喜欢把参数都放在配置文件中,便于修改和操作。