zoukankan      html  css  js  c++  java
  • 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.   

  • 相关阅读:
    more命令
    mktemp命令
    有效的括号字符串
    mc命令
    字符串相加
    Vue中虚拟DOM的理解
    chattr命令
    记近一年线上项目经验及架构变更记录
    微博AnalysisQl动态数据视图元数据设计
    搭建prometheus+grafana监控SpringBoot应用入门
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/7029030.html
Copyright © 2011-2022 走看看