Spring整合HIbernate时,三种数据库连接池的配置和比较

现在常用的开源数据库连接池主要有c3p0、dbcp、proxool三种,其中:

Spring                         推荐使用dbcp;

Hibernate                  推荐使用c3p0和proxool;

1、  DBCP:Apache

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操作通过帮助进程完成。扩展这些操作可以有效的提升性能。目前使用它的开源项目有Hibernate,Spring等。c3p0有自动回收空闲连接功能。

3、  Proxool:Sourceforge

Proxool是一种Java数据库连接池技术。是sourceforge下的一个开源项目,这个项目提供一个健壮、易用的连接池,最为关键的是这个连接池提供监控的功能,方便易用,便于发现连接泄漏的情况。

对比:

1>     相同时间内同等量的线程数和循环次数下:通过对三个连接池的三个标志性性能测试参数(Average,median,90%Line)进行比较发现:性能dbcp<=c3p0<proxool;

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

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

结论:

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

各种连接池的配置:

未配置连接池的情况:

view
plain
copy
to clipboard
print?

  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

view
plain
copy
to clipboard
print?

  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>

配置C3p0

view
plain
copy
to clipboard
print?

  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. <property name="checkoutTimeout" value="${checkoutTimeout}"/>
  9. <property name="idleConnectionTestPeriod" value="${idleConnectionTestPeriod}"/>
  10. <property name="initialPoolSize" value="${initialPoolSize}"/>
  11. <property name="maxIdleTime" value="${maxIdleTime}"/>
  12. <property name="maxPoolSize" value="${maxPoolSize}"/>
  13. <property name="minPoolSize" value="${minPoolSize}"/>
  14. <property name="maxStatements" value="${maxStatements}"/>
  15. </bean>

配置jndi

view
plain
copy
to clipboard
print?

  1. <!--
  2. <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"
  3. scope="singleton">
  4. <property name="jndiName" value="/jdbc/spring-jndi" />
  5. < !--
  6. 当resourceRef 属性为true时,jndiName会被添加java:comp/env/,从应用服务器的JNDI目录获取数据源
  7. -- >
  8. <property name="resourceRef" ref="true" />
  9. </bean>
  10. -->
  11. <!-- jee 命名空间里的jee:jndi-lookup 元素可以从jndi获取对象。下面的XML等效于前面对JndiObjectFactoryBean的明确声明 -->
  12. <jee:jndi-lookup id="dataSource" jndi-name="/jdbc/spring-jndi" resource-ref="true"/>

测试使用一下

view
plain
copy
to clipboard
print?

  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>

。。。。。。

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. }

。。。。。。

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. }

。。。。。

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. public void testGetConn() throws SQLException{
  15. System.out.println(helloJdbcDao.getConnection());
  16. }
  17. }

Spring整合HIbernate时,三种数据库连接池的配置和比较

时间: 2024-12-12 05:52:34

Spring整合HIbernate时,三种数据库连接池的配置和比较的相关文章

三种数据库连接池的配置及使用(For JDBC)

DBCP 一.导包 Apache官网下载DBCP包,导入两个包路径如下: commons-dbcp-1.4-bin\commons-dbcp-1.4\commons-dbcp-1.4.jar:连接池的实现 commons-pool-1.5.6-bin\commons-pool-1.5.6\commons-pool-1.5.6.jar:连接池实现的依赖库 CSDN上jar包的下载地址:http://download.csdn.NET/detail/u012802702/9491642 二.代码示例

21Spring_JdbcTemplatem模板工具类的使用——配置文件(连接三种数据库连接池)

上一篇文章提到过DriverManagerDataSource只是Spring内置的数据库连接池,我们可选的方案还有c3p0数据库连接池以及DBCP数据库连接池. 所以这篇文章讲一下上面三种数据库连接池的配置文件的形式. 第一种:DriverManagerDataSource:Spring内置的数据库连接池. 第一步:编写配置文件: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="

Spring整合Hibernate的两种方式

在使用spring注解整合hibernate时出现"org.hibernate.MappingException: Unknown entity: com.ssh.entry.Product“异常的问题. 最后找到了问题,总结一下 1.spring整合hibernate,取代*.hbm.xml配置文件  在applicationContext.xml文件中配置方式 <!-- 创建sessionFactory --> <bean id="sessionFactory&q

Spring 整合hibernate和mybatis的 applicationContext.xml的配置

Spring整合hibernate的applicationContext.xml配置 1.注解方式的实现 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" x

Spring整合JMS(二)——三种消息监听器

一.消息监听器MessageListener 在Spring整合JMS的应用中我们在定义消息监听器的时候一共可以定义三种类型的消息监听器,分别是MessageListener.SessionAwareMessageListener和MessageListenerAdapter.下面就分别来介绍一下这几种类型的区别. 1).MessageListener MessageListener是最原始的消息监听器,它是JMS规范中定义的一个接口.其中定义了一个用于处理接收到的消息的onMessage方法,

Spring 集成Hibernate的三种方式

首先把hibernate的配置文件hibernate.cfg.xml放入spring的src目录下,并且为了便于测试导入了一个实体类Student.java以及它的Student.hbm.xml文件 第一种集成方式:首先定义一个MySessionFactory的类 package com.tz.core; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import org.springfr

Spring 整合 Hibernate 时启用二级缓存实例详解

写在前面: 1. 本例使用 Hibernate3 + Spring3: 2. 本例的查询使用了 HibernateTemplate: 1. 导入 ehcache-x.x.x.jar 包: 2. 在 applicationContext.xml 文件中找到 sessionFactory 相应的配置信息并在设置 hibernateProperties 中添加如下代码: ? 1 2 3 4 5 6 <!-- 配置使用查询缓存 --> <prop key="hibernate.cach

【Hibernate学习笔记-3】在Spring下整合Hibernate时, 关于sessionFactory的类型的说明

摘要 在Spring下整合Hibernate时,关于sessionFactory的配置方式主要有两种,分别为注解配置方式,和xml配置方式,下面将对这两种配置方式进行介绍. 1. sessionFactory和数据库对应,有多少个数据库,就需要配置多少个sessionFactory: 2. session相当于数据库连接,进行数据库的CRUD操作时,需要开启session,用完需要关闭session: 3. 配置sessionFactory,主要要配置如下三个方面: 3.1. 数据源配置: 3.

Spring整合Hibernate的时候使用hibernate.cfg.xml

Spring整合Hibernate其实也就是把Hibernate的SessionFactory对象封装成:org.springframework.orm.hibernate3.LocalSessionFactoryBean 在由自己来保管和控制. 在配置LocalSessionFactoryBean的时候,如果要用到hibernate.cfg.xml配置文件,那么就要配置: configLocations属性,这个属性就是叫Spring在配置LocalSessionFactoryBean的时候去