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 

2>     不同情况下的同一数据库连接池测试:通过观察 Average,median,90%Line三个参数发

现三个连接池的稳定性(三种连接池的三个测试参数的变化情况)依次:稳定性dbcp>=c3p0>proxool 

结论:   

通过对三种数据库连接池的性能测试发现,proxool c3p0能够更好的支持高并发,但是在稳定性方面略逊于 dpcp;


各种连接池的配置:


未配置连接池的情况:

view plain copy to clipboard print ?
  1. "1.0" encoding="UTF-8"?>  
  2. "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. "classpath:jdbc_config.properties"/>  
  14.   
  15. "dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
  16.   "driverClassName" value="${driverClassName}"/>  
  17.   "url" value="${url}"/>  
  18.   "username" value="${username}"/>  
  19.   "password" value="${password}"/>  
  20.   
  21.  

配置DBCP

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

配置jndi
view plain copy to clipboard print ?
  1.   
  2.   
  3.   
  4. "dataSource" jndi-name="/jdbc/spring-jndi" resource-ref="true"/>  
  5.   

测试使用一下 

view plain copy to clipboard print ?
  1. <import resource="classpath:bean-dbcp.xml" />  
  2. "helloJdbcDao" class="cn.partner4java.jdbc.impl.HelloJdbcDaoBean">  
  3.   "dataSource" ref="dataSource"/>  
  4.   
  5.   

。。。。。。 
view plain copy to clipboard print ?
  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.   

。。。。。。 
view plain copy to clipboard print ?
  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.   

。。。。。 
view plain copy to clipboard print ?
  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.   

你可能感兴趣的:(Spring)