日期:2014-05-16  浏览次数:20548 次

常用连接池
连接池
  连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用。
为什么用使用连接池
  为了避免每次访问的时候都需要重新建立新的连接而影响运[align=center][/align]行速度,在实际的项目中必 须使用数据库连接池来提高数据库的访问效率
数据库连接池的主要操作如下  
  建立数据库连接池对象(服务器启动)。  
  按照事先指定的参数创建初始数量的数据库连接(即:空闲连接数)。  
  对于一个数据库访问请求,直接从连接池中得到一个连接。如果数据库连接池对象中没有空闲的连接,且连接数没有达到最大(即:最大活跃连接数),创建一个新的数据库连接。  
  存取数据库。  
  关闭数据库,释放所有数据库连接(此时的关闭数据库连接,并非真正关闭,而是将其放入空闲队列中。如实际空闲连接数大于初始空闲连接数则释放连接)。  
  释放数据库连接池对象(服务器停止、维护期间,释放数据库连接池对象,并释放所有连接)。
连接池主要的优点
     连接池可以极大的改善用户的 Java 应用程序的性能,同时减少全部资源的使用。
减少连接创建时间  
  虽然与其它数据库相比 GBase 提供了较为快速连接功能,但是创建新的 JDBC 连接仍会招致网络和 JDBC 驱动的开销。如果这类连接是“循环”使用的,使用该方式这些花销就可避免。  
简化的编程模式  
  当使用连接池时,每一个单独的线程能够像创建了一个自己的 JDBC 连接一样操作,允许用户直接使用JDBC编程技术。  
受控的资源使用  
  如果用户不使用连接池,而是每当线程需要时创建一个新的连接,那么用户的应用程序的资源使用会产生非常大的浪费并且可能会导致高负载下的异常发生。

常用连接池
  
1 dbcp dbcp可能是使用最多的开源连接池,原因大概是因为配置方便,而且很多开源和 tomcat应用例子都是使用的这个连接池吧。 这个连接池可以设置最大和最小连接,连接等待时间等,基本功能都有。

使用评价:
  在具体项目应用中,发现此连接池的持续运行的稳定性还是可以,不过速度稍慢,在大并发量的压力下稳定性有所下降,此外不提供连接池监控

2 c3p0 c3p0是另外一个开源的连接池,在业界也是比较有名的,这个连接池可以设置最 大和最小连接,连接等待时间等,基本功能都有。 使用评价:
  在具体项目应用中,发现此连接池的持续运行的稳定性相当不错,在大并发 量 的压力下稳定性也有一定保证,此外不提供连接池监控。
3 proxool
proxool这个连接池可能用到的人比较少,但也有一定知名度,这个连接池可以设 置最大和最小连接,连接等待时间等,基本功能都有。 使用评价:
  在具体项目应用中,发现此连接池的持续运行的稳定性有一定问题,有一个 需要长时间跑批的任务场景任务,同样的代码 在另外2个开源连接池中成功结束,但在proxool中出现异常退出。
Dbcp的代码
在datasource中配置
<bean id="dataSource"
          class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="url">
            <value>jdbc:mysql://127.0.0.1:3306/hua?useUnicode=true&amp;characterEncoding=GBK</value>
        </property>
        <property name="driverClassName">
            <value>com.mysql.jdbc.Driver</value>
        </property>
        <property name="username">
            <value>root</value>
        </property>
        <property name="password">
            <value>root</value>
        </property>
        <property name="maxActive">
            <value>100</value>
        </property>
        <property name="maxWait">
            <value>100</value>
        </property>
    </bean>
</beans>
在spring-common.xml中配置如下
<!-- 配置sessionFactory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource" >
<ref bean="dataSource"/>
</property>
<property name="configLocation">
<value>classpath:conf/hibernate.cfg.xml</value>
</property>
</bean>  
只是配置这俩个文件其他跟原来的一样即可

C3p0的代码
在datasource中配置

<beans>
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:jdbc.propert