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

spring下连接池比较

2010-01-18 11:11 239 查看
最近遇到了一个奇怪的问题,使用了Apache的连接池,当数据库重启之后,就无法连接到数据库上了,开始以为是程序的问题,看了一些代码,无用。后经同事提示,在连接池的配置中加了一项:

<parameter>

<name>validationQuery</name>

<value>SELECT 1</value>

</parameter>

就Ok了,才明白这个是用来检查连接的,当访问量不大时,连接池中的连接足够用,它不会去申请新的连接,但原有的连接已经被重置了,也就是reset了,无法使用,因此对于使用连接池,应该加上面的配置,以检查数据库连接。

同样,使用spring来配置连接池的时候也应该加上:

<property name="validationQuery">

<value>SELECT 1</value>

</property>

防止数据库重新启动后出现问题。

spring下的各种连接池的比较


hibernate
开发组推荐c3p0,spring开发组推荐dbcp,但是dbcp连接池有weblogic连接池同样的问题,就是强行关闭连接或数据库重启后,无法
reconnect ,告诉连接被重置,这个设置可以解决。hibernate in action推荐c3p0和proxool。

我推荐proxool,因为他不但可以监控后台。还可以有效的释放连接。在connection close时,也就是归还connection,

关闭所有的statement,并且判断是否autocommit,如果不行,就rollback,并且设置true,

可以参考proxool的org.logicalcobwebs.proxool.ConnectionResetter类

connection pool把connection reset置回initial state。

dbcp的配置

<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}"/>

<property name="validationQuery">

<value>SELECT 1</value>

</property>

<property name="testOnBorrow">

<value>true</value>

</property>

</bean>

c3p0的配置, 注意是''driverClass' , 'jdbcUrl', 'user' , 'password'

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">

<property name="driverClass">

<value>net.sourceforge.jtds.jdbc.Driver</value>

</property>

<property name="jdbcUrl">

<value>jdbc:jtds:sqlserver://localhost:1433/hua</value>

</property>

<property name="user">

<value>sa</value>

</property>

<property name="password">

<value>hua</value>

</property>

<property name="minPoolSize">

<value>15</value>

</property>

<property name="acquireIncrement">

<value>5</value>

</property>

<property name="maxPoolSize">

<value>25</value>

</property>

</bean>



<bean id="c3p0DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"

destroy-method="close">

<property name="driverClass">

<value>${db.driverClass}</value>

</property>

<property name="jdbcUrl">

<value>${db.url}</value>

</property>

<!--

<property name="user">

<value>${db.user}</value>

</property>

<property name="password">

<value>${db.pass}</value>

</property>

-->

<property name="properties">

<props>

<prop key="c3p0.acquire_increment">5</prop>

<prop key="c3p0.idle_test_period">100</prop>

<prop key="c3p0.max_size">100</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>

xapool的配置

<bean id="dataSource" class="org.enhydra.jdbc.pool.StandardPoolDataSource" destroy-method="stopPool">

<constructor-arg index="0">

<bean class="org.enhydra.jdbc.standard.StandardConnectionPoolDataSource">

<property name="driverName"><value>com.mysql.jdbc.Driver</value></property>

<property name="url"><value>jdbc:mysql://localhost/dbname</value></property>

</bean>

</constructor-arg>

<property name="user"><value>root</value></property>

<property name="password"><value>mypass</value></property>

<property name="minSize"><value>1</value></property>

<property name="maxSize"><value>5</value></property>

<property name="jdbcTestStmt"><value>select 1</value></property>

</bean>

c-jdbc的配置

<bean id="dataSource" class="org.objectweb.cjdbc.driver.DataSource">

<property name="url"><value>jdbc:cjdbc://127.0.0.1:25322/vdb?user=vuser</value></property>

</bean>

weblogic的连接池解决办法:Test Reserved Connections: 如果选择了这个选项,服务器会在把连接提供给客户端之前

对其进行测试。 Test Created Connections: 如果选择了这个选项,就会在创建一个JDBC

连接之后和在把它添加到JDBC连接池中的可用连接列表之前,对该JDBC连接进行测试。

tomcat的jndi关于dbcp的配置:

<parameter>

<name>factory</name>

<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>

</parameter>

<parameter>

<name>driverClassName</name>

<value>com.sybase.jdbc2.jdbc.SybDriver</value>

</parameter>

<parameter>

<name>url</name>

<value>xyz</value>

</parameter>

<parameter>

<name>username</name>

<value>xyz</value>

</parameter>

<parameter>

<name>password</name>

<value>xyz</value>

</parameter>

<parameter>

<name>maxActive</name>

<value>5</value>

</parameter>

<parameter>

<name>maxIdle</name>

<value>5</value>

</parameter>

<parameter>

<name>maxWait</name>

<value>-1</value>

</parameter>

<parameter>

<name>removeAbandoned</name>

<value>true</value>

</parameter>

<parameter>

<name>validationQuery</name>

<value>select count(*) from sometable where 1 = 0</value>

</parameter>

<parameter>

<name>testOnBorrow</name>

<value>true</value>

</parameter>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: