Spring整合HIbernate時,三種數據庫連接池的配置和比較


如今經常使用的開源數據庫連接池主要有c3p0dbcpproxool三種,當中:

Spring                         推薦使用dbcp

Hibernate                  推薦使用c3p0proxool 

1、  DBCPApache

DBCP(DataBase connection pool)數據庫連接池。

Apache上的一個 java連接池項目,也是 tomcat使用的連接池組件。單獨使用dbcp須要3個包:common-dbcp.jar,common-pool.jar,common-collections.jar因為建立數據庫連接是一個很耗時耗資源的行為。所以通過連接池預先同數據庫建立一些連接,放在內存中,應用程序須要建立數據庫連接時直接到連接池中申請一個即可,用完后再放回去。dbcp沒有自己主動的去回收空暇連接的功能。 

2、  C3P0

C3P0是一個開源的JDBC連接池,它實現了數據源和JNDI綁定,支持JDBC3規范和JDBC2的標准擴展。

c3p0是異步操作的,緩慢的JDBC操作通過幫助進程完畢。

擴展這些操作能夠有效的提升性能。

眼下使用它的開源項目有HibernateSpring等。c3p0有自己主動回收空暇連接功能。 

3、  ProxoolSourceforge

Proxool是一種Java數據庫連接池技術。是sourceforge下的一個開源項目,這個項目提供一個健壯、易用的連接池。最為關鍵的是這個連接池提供監控的功能,方便易用,便於發現連接泄漏的情況。 

對照:

1>     同樣時間內同等量的線程數和循環次數下:通過對三個連接池的三個標志性性能測試參數(Average,median,90%Line)進行比較發現:性能dbcp<=c3p0<proxool 

2>     不同情況下的同一數據庫連接池測試:通過觀察 Average,median,90%Line三個參數發

現三個連接池的穩定性(三種連接池的三個測試參數的變化情況)依次:穩定性dbcp>=c3p0>proxool 

結論:   

通過對三種數據庫連接池的性能測試發現,proxool c3p0可以更好的支持高並發。可是在穩定性方面略遜於 dpcp。


各種連接池的配置:


未配置連接池的情況:

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans"  
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"  
  4. xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"  
  5.   xmlns:jee="http://www.springframework.org/schema/jee"   
  6. xsi:schemaLocation="http://www.springframework.org/schema/beans  
  7.            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  
  8.            http://www.springframework.org/schema/context  
  9.            http://www.springframework.org/schema/context/spring-context-2.5.xsd  
  10.            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd   
  11.             http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd    
  12.             http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">  
  13. <context:property-placeholder location="classpath:jdbc_config.properties"/>  
  14. <!--   
  15.   DriverManagerDataSource:在每一個連接請求時新建一個連接。  
  16.   SingleConnectionDataSource:在每一個連接請求時都返回同一連接。  
  17.   -->  
  18. <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
  19.   <property name="driverClassName" value="${driverClassName}"/>  
  20.   <property name="url" value="${url}"/>  
  21.   <property name="username" value="${username}"/>  
  22.   <property name="password" value="${password}"/>  
  23. </bean>   
  24. </beans>  

配置DBCP

  1. <context:property-placeholder location="classpath:dbcp_config.properties" />  
  2.   <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  
  3.   destroy-method="close">  
  4.   <property name="driverClassName" value="${driverClassName}"/>  
  5.   <property name="url" value="${url}"/>  
  6.   <property name="username" value="${username}"/>  
  7.   <property name="password" value="${password}"/>  
  8.   <property name="initialSize" value="${initialSize}"/>  
  9.   <property name="maxActive" value="${maxActive}"/>  
  10.   <property name="maxIdle" value="${maxIdle}"/>  
  11.   <property name="minIdle" value="${minIdle}"/>  
  12.   <property name="maxWait" value="${maxWait}"/>  
  13.   <property name="defaultAutoCommit" value="${defaultAutoCommit}"/>  
  14. </bean>  
  15.   
配置C3p0
  1. <context:property-placeholder location="classpath:c3p0_config.properties"/>  
  2. <bean id="dataSource"  
  3.   class="com.mchange.v2.c3p0.ComboPooledDataSource">  
  4.   <property name="user" value="${user}"/>   
  5.   <property name="password" value="${password}"/>   
  6.   <property name="jdbcUrl" value="${jdbcUrl}"/>   
  7.   <property name="driverClass" value="${driverClass}"/>   
  8.     
  9.   <property name="checkoutTimeout" value="${checkoutTimeout}"/>   
  10.   <property name="idleConnectionTestPeriod" value="${idleConnectionTestPeriod}"/>   
  11.   <property name="initialPoolSize" value="${initialPoolSize}"/>   
  12.   <property name="maxIdleTime" value="${maxIdleTime}"/>   
  13.     
  14.   <property name="maxPoolSize" value="${maxPoolSize}"/>   
  15.   <property name="minPoolSize" value="${minPoolSize}"/>   
  16.   <property name="maxStatements" value="${maxStatements}"/>   
  17. </bean>  
  18.   

配置jndi
  1.   
  2. <!--    
  3. <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"  
  4.   scope="singleton">  
  5.   <property name="jndiName" value="/jdbc/spring-jndi" />  
  6.   < !--  
  7.    當resourceRef 屬性為true時,jndiName會被加入java:comp/env/。從應用server的JNDI文件夾獲取數據源  
  8.   -- >  
  9.   <property name="resourceRef" ref="true" />  
  10. </bean>  
  11. -->  
  12. <!-- jee 命名空間里的jee:jndi-lookup 元素能夠從jndi獲取對象。以下的XML等效於前面對JndiObjectFactoryBean的明白聲明 -->  
  13. <jee:jndi-lookup id="dataSource" jndi-name="/jdbc/spring-jndi" resource-ref="true"/>  
  14.   

測試使用一下 

  1. <import resource="classpath:bean-dbcp.xml" />  
  2. <bean id="helloJdbcDao" class="cn.partner4java.jdbc.impl.HelloJdbcDaoBean">  
  3.   <property name="dataSource" ref="dataSource"/>  
  4. </bean>  
  5.   

。。。。

。 

  1. package cn.partner4java.jdbc;  
  2. import java.sql.Connection;  
  3. import java.sql.SQLException;  
  4. /** 
  5. * 存jdbc練習 
  6. * @author wangchanglong 
  7. * 
  8. */  
  9. public interface HelloJdbcDao {  
  10. public Connection getConnection() throws SQLException;  
  11. }  
  12.   

。。。

。。 

  1. package cn.partner4java.jdbc.impl;  
  2. import java.sql.Connection;  
  3. import java.sql.SQLException;  
  4. import javax.sql.DataSource;  
  5. import cn.partner4java.jdbc.HelloJdbcDao;  
  6. /** 
  7. * 最簡單的練習 
  8. * @author wangchanglong 
  9. * 
  10. */  
  11. public class HelloJdbcDaoBean implements HelloJdbcDao{  
  12. public DataSource dataSource;  
  13. public void setDataSource(DataSource dataSource) {  
  14.   this.dataSource = dataSource;  
  15. }  
  16. public Connection getConnection() throws SQLException {  
  17.   return dataSource.getConnection();  
  18. }  
  19.   
  20. }  
  21.   

。。

。。。 

  1. package cn.partner4java.jdbc.junit;  
  2. import java.sql.SQLException;  
  3. import org.springframework.context.ApplicationContext;  
  4. import org.springframework.context.support.ClassPathXmlApplicationContext;  
  5. import cn.partner4java.jdbc.HelloJdbcDao;  
  6. import junit.framework.TestCase;  
  7. public class HelloJdbcDaoBeanTest extends TestCase {  
  8. public HelloJdbcDao helloJdbcDao;  
  9. @Override  
  10. protected void setUp() throws Exception {  
  11.   ApplicationContext ac = new ClassPathXmlApplicationContext("beans-jdbc.xml");  
  12.   helloJdbcDao = (HelloJdbcDao) ac.getBean("helloJdbcDao");  
  13. }  
  14.   
  15. public void testGetConn() throws SQLException{  
  16.   System.out.println(helloJdbcDao.getConnection());  
  17. }  
  18.   
  19. }  
  20.   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM