spring 配置连接
在默认通过myeclipse生成的配置里,
<property name="password" value="root"></property>?
</bean>?
如果改为C3P0则为:?
<bean id="propertyConfigurer"?
value="com.mysql.jdbc.Driver" />?
<property name="jdbcUrl" value="${jdbc.url}" />?
<property name="user" value="${jdbc.username}" />?
<property name="password" value="${jdbc.password}" />?
<property name="autoCommitOnClose" value="true"/>?
<property name="checkoutTimeout" value="${cpool.checkoutTimeout}"/>?
<property name="initialPoolSize" value="${cpool.minPoolSize}"/>?
<property name="minPoolSize" value="${cpool.minPoolSize}"/>?
<property name="maxPoolSize" value="${cpool.maxPoolSize}"/>?
<property name="maxIdleTime" value="${cpool.maxIdleTime}"/>?
<property name="acquireIncrement" value="${cpool.acquireIncrement}"/>?
<property name="maxIdleTimeExcessConnections" value="${cpool.maxIdleTimeExcessConnections}"/>?
</bean>?
jdbc.properties:?
# Database URL?
jdbc.url=jdbc:mysql://192.168.0.25"3306/db?
# Database login information?
jdbc.username=root?
jdbc.password=?
# Time to wait for an open connection before timing out?
# (in milliseconds)?
cpool.checkoutTimeout=5000?
# Connection pool size?
cpool.minPoolSize=5?
cpool.maxPoolSize=40?
# How long to keep unused connections around(in seconds)?
# Note: MySQL times out idle connections after 8 hours(28,800 seconds)?
# so ensure this value is below MySQL idle timeout?
cpool.maxIdleTime=25200?
# How long to hang on to excess unused connections after traffic spike?
# (in seconds)?
cpool.maxIdleTimeExcessConnections=1800?
# Acquiring new connections is slow, so eagerly retrieve extra connections?
# when current pool size is reached?
cpool.acquireIncrement=5?
或者将上面的3部分写成一个:?
<bean id="c3p0DataSource" destroy-method="close">?
<property name="driverClass">?
<value>${jdbc.driverClassName}</value>?
</property>?
<property name="jdbcUrl">?
<value>${jdbc.url}</value>?
</property>?
<property name="user">?
<value>${jdbc.username}</value>?
</property>?
<property name="password">?
<value>${jdbc.password}</value>?
</property>?
<property name="initialPoolSize"><value>10</value></property>?
<property name="minPoolSize"><value>5</value></property>?
<property name="maxPoolSize"><value>30</value></property>?
<property name="acquireIncrement"><value>5</value></property>?
<property name="maxIdleTime"><value>10</value></property>?
<property name="maxStatements"><value>0</value></property>?
</bean>?
如果使用的是受管理的J2EE服务器,则在
</property>?
<property name="
type="javax.sql.DataSource"/>?
<ResourceParams name="jdbc/testDB">\\数据源的名称?
<parameter><name>username</name><value>root</value></parameter>数据库的名称?
<parameter><name>password</name><value>password</value></parameter>数据库密码?
<parameter><name>driverClassName</name>?
<value>org.gjt.mm.mysql.Driver</value></parameter>\\要加载的驱动?
<parameter><name>url</name>?
<value>jdbc:mysql://172.20.0.73/rk?</value></parameter>\\要连接的URL?
</ResourceParams>?
<?xml version="1.0" encoding="UTF-8"?>?
<!DOCTYPE beans public "-//
<property name="nativeJdbcExtractor">?
<ref local="nativeJdbcExtractor"/>?
</property>?
</bean>?
<bean id="dataSource" destroy-method="close">?
<property name="driverClass">?
<value>${datasource.driverClassName}</value>?
</property>?
<property name="jdbcUrl">?
<value>${datasource.url}</value>?
</property>?
<property name="properties">?
<props>?
<prop key="c3p0.minPoolSize">${
<!-- the proxool configuration can be embedded within your own application's.?
Anything outside the "proxool" tag is ignored. -->?
<something-else-entirely>?
<proxool>?
<alias>pool1</alias>?
<!--proxool只能管理由自己产生的连接-->?
<driver-url>jdbc:mysql://localhost:3306/struts?useUnicode=true&characterEncoding=GBK</driver-url>?
<driver-class>org.gjt.mm.mysql.Driver</driver-class>?
<driver-properties>?
<property name="user" value="root"/>?
<property name="password" value="8888"/>?
</driver-properties>?
<!-- proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁-->?
<house-keeping-sleep-time>90000</house-keeping-sleep-time>?
<!-- 指因未有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受-->?
<maximum-new-connections>20</maximum-new-connections>?
<!-- 最少保持的空闲连接数-->?
<prototype-count>5</prototype-count>?
<!-- 允许最大连接数,超过了这个连接,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new-connections决定-->?
<maximum-connection-count>100</maximum-connection-count>?
<!-- 最小连接数-->?
<minimum-connection-count>10</minimum-connection-count>?
</proxool>?
</something-else-entirely>?
并在classespath中加入proxool-0.8.3.jar?
结论:?
hibernate.org中,明确指出在实践中发现dbcp有 BUG,在某些种情会产生很多空连接不能释放,所以抛弃了对dbcp的支持。我不知是否在dbcp最新版本中解决了这个问题,我以前在一个访问量不大的项目中用过dbcp,运行了一年多都没出现问题。不过在网上的确也有不少网友指出dbcp在大型的应用中会出现不稳定的情况。所以在真相未经证实的情况下,我觉得对dbcp持慎重的态度。?
至于c3p0,有评论说它的算法不是最优的,而且,我在matrix中,见到有网友做了一个实验,在同一项目中分别用了几个常用的连接池,然后测试其性能,发现c3p0占用资源比较大,效率也不高。?
所以,基于上述原因,我才花两晚的时间去研究proxool的配置,proxool不少行家推荐使用,而且暂时来说,是负面评价是最少的一个。在三星中也有项目是用proxool的。?