Spring整合HIbernate时,三种数据库连接池的配置和比較
2018-03-05 19:34
483 查看
如今经常使用的开源数据库连接池主要有c3p0、dbcp、proxool三种,当中:Spring 推荐使用dbcp;Hibernate 推荐使用c3p0和proxool; 1、 DBCP:ApacheDBCP(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:SourceforgeProxool是一种Java数据库连接池技术。是sourceforge下的一个开源项目,这个项目提供一个健壮、易用的连接池。最为关键的是这个连接池提供监控的功能,方便易用,便于发现连接泄漏的情况。 对照:1> 同样时间内同等量的线程数和循环次数下:通过对三个连接池的三个标志性性能測试參数(Average,median,90%Line)进行比較发现:性能dbcp<=c3p0<proxool; 2> 不同情况下的同一数据库连接池測试:通过观察 Average,median,90%Line三个參数发现三个连接池的稳定性(三种连接池的三个測试參数的变化情况)依次:稳定性dbcp>=c3p0>proxool。 结论: 通过对三种数据库连接池的性能測试发现,proxool和 c3p0可以更好的支持高并发。可是在稳定性方面略逊于 dpcp。
各种连接池的配置:
未配置连接池的情况:view plaincopy to clipboardprint?<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <context:property-placeholder location="classpath:jdbc_config.properties"/>
<!--
DriverManagerDataSource:在每一个连接请求时新建一个连接。
SingleConnectionDataSource:在每一个连接请求时都返回同一连接。
-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${driverClassName}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</bean>
</beans>
配置DBCPview plaincopy to clipboardprint?<context:property-placeholder location="classpath:dbcp_config.properties" />
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${driverClassName}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
<property name="initialSize" value="${initialSize}"/>
<property name="maxActive" value="${maxActive}"/>
<property name="maxIdle" value="${maxIdle}"/>
<property name="minIdle" value="${minIdle}"/>
<property name="maxWait" value="${maxWait}"/>
<property name="defaultAutoCommit" value="${defaultAutoCommit}"/>
</bean>
配置C3p0
view plaincopy to clipboardprint?<context:property-placeholder location="classpath:c3p0_config.properties"/>
<bean id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="${user}"/>
<property name="password" value="${password}"/>
<property name="jdbcUrl" value="${jdbcUrl}"/>
<property name="driverClass" value="${driverClass}"/>
<property name="checkoutTimeout" value="${checkoutTimeout}"/>
<property name="idleConnectionTestPeriod" value="${idleConnectionTestPeriod}"/>
<property name="initialPoolSize" value="${initialPoolSize}"/>
<property name="maxIdleTime" value="${maxIdleTime}"/>
<property name="maxPoolSize" value="${maxPoolSize}"/>
<property name="minPoolSize" value="${minPoolSize}"/>
<property name="maxStatements" value="${maxStatements}"/>
</bean>
配置jndi
view plaincopy to clipboardprint?
<!--
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"
scope="singleton">
<property name="jndiName" value="/jdbc/spring-jndi" />
< !--
当resourceRef 属性为true时,jndiName会被加入java:comp/env/。从应用server的JNDI文件夹获取数据源
-- >
<property name="resourceRef" ref="true" />
</bean>
-->
<!-- jee 命名空间里的jee:jndi-lookup 元素能够从jndi获取对象。以下的XML等效于前面对JndiObjectFactoryBean的明白声明 -->
<jee:jndi-lookup id="dataSource" jndi-name="/jdbc/spring-jndi" resource-ref="true"/>
測试使用一下
view plaincopy to clipboardprint?<import resource="classpath:bean-dbcp.xml" />
<bean id="helloJdbcDao" class="cn.partner4java.jdbc.impl.HelloJdbcDaoBean">
<property name="dataSource" ref="dataSource"/>
</bean>
。。。。。。
view plaincopy to clipboardprint?package cn.partner4java.jdbc;
import java.sql.Connection;
import java.sql.SQLException;
/**
* 存jdbc练习
* @author wangchanglong
*
*/
public interface HelloJdbcDao {
public Connection getConnection() throws SQLException;
}
。。。。。。
view plaincopy to clipboardprint?package cn.partner4java.jdbc.impl;
import java.sql.Connection;
import java.sql.SQLException;
import javax.sql.DataSource;
import cn.partner4java.jdbc.HelloJdbcDao;
/**
* 最简单的练习
* @author wangchanglong
*
*/
public class HelloJdbcDaoBean implements HelloJdbcDao{
public DataSource dataSource;
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
public Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
}
。。。。。
view plaincopy to clipboardprint?package cn.partner4java.jdbc.junit;
import java.sql.SQLException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.partner4java.jdbc.HelloJdbcDao;
import junit.framework.TestCase;
public class HelloJdbcDaoBeanTest extends TestCase {
public HelloJdbcDao helloJdbcDao;
@Override
protected void setUp() throws Exception {
ApplicationContext ac = new ClassPathXmlApplicationContext("beans-jdbc.xml");
helloJdbcDao = (HelloJdbcDao) ac.getBean("helloJdbcDao");
}
public void testGetConn() throws SQLException{
System.out.println(helloJdbcDao.getConnection());
}
}
各种连接池的配置:
未配置连接池的情况:view plaincopy to clipboardprint?<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <context:property-placeholder location="classpath:jdbc_config.properties"/>
<!--
DriverManagerDataSource:在每一个连接请求时新建一个连接。
SingleConnectionDataSource:在每一个连接请求时都返回同一连接。
-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${driverClassName}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</bean>
</beans>
配置DBCPview plaincopy to clipboardprint?<context:property-placeholder location="classpath:dbcp_config.properties" />
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="${driverClassName}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
<property name="initialSize" value="${initialSize}"/>
<property name="maxActive" value="${maxActive}"/>
<property name="maxIdle" value="${maxIdle}"/>
<property name="minIdle" value="${minIdle}"/>
<property name="maxWait" value="${maxWait}"/>
<property name="defaultAutoCommit" value="${defaultAutoCommit}"/>
</bean>
配置C3p0
view plaincopy to clipboardprint?<context:property-placeholder location="classpath:c3p0_config.properties"/>
<bean id="dataSource"
class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="user" value="${user}"/>
<property name="password" value="${password}"/>
<property name="jdbcUrl" value="${jdbcUrl}"/>
<property name="driverClass" value="${driverClass}"/>
<property name="checkoutTimeout" value="${checkoutTimeout}"/>
<property name="idleConnectionTestPeriod" value="${idleConnectionTestPeriod}"/>
<property name="initialPoolSize" value="${initialPoolSize}"/>
<property name="maxIdleTime" value="${maxIdleTime}"/>
<property name="maxPoolSize" value="${maxPoolSize}"/>
<property name="minPoolSize" value="${minPoolSize}"/>
<property name="maxStatements" value="${maxStatements}"/>
</bean>
配置jndi
view plaincopy to clipboardprint?
<!--
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"
scope="singleton">
<property name="jndiName" value="/jdbc/spring-jndi" />
< !--
当resourceRef 属性为true时,jndiName会被加入java:comp/env/。从应用server的JNDI文件夹获取数据源
-- >
<property name="resourceRef" ref="true" />
</bean>
-->
<!-- jee 命名空间里的jee:jndi-lookup 元素能够从jndi获取对象。以下的XML等效于前面对JndiObjectFactoryBean的明白声明 -->
<jee:jndi-lookup id="dataSource" jndi-name="/jdbc/spring-jndi" resource-ref="true"/>
測试使用一下
view plaincopy to clipboardprint?<import resource="classpath:bean-dbcp.xml" />
<bean id="helloJdbcDao" class="cn.partner4java.jdbc.impl.HelloJdbcDaoBean">
<property name="dataSource" ref="dataSource"/>
</bean>
。。。。。。
view plaincopy to clipboardprint?package cn.partner4java.jdbc;
import java.sql.Connection;
import java.sql.SQLException;
/**
* 存jdbc练习
* @author wangchanglong
*
*/
public interface HelloJdbcDao {
public Connection getConnection() throws SQLException;
}
。。。。。。
view plaincopy to clipboardprint?package cn.partner4java.jdbc.impl;
import java.sql.Connection;
import java.sql.SQLException;
import javax.sql.DataSource;
import cn.partner4java.jdbc.HelloJdbcDao;
/**
* 最简单的练习
* @author wangchanglong
*
*/
public class HelloJdbcDaoBean implements HelloJdbcDao{
public DataSource dataSource;
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
public Connection getConnection() throws SQLException {
return dataSource.getConnection();
}
}
。。。。。
view plaincopy to clipboardprint?package cn.partner4java.jdbc.junit;
import java.sql.SQLException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.partner4java.jdbc.HelloJdbcDao;
import junit.framework.TestCase;
public class HelloJdbcDaoBeanTest extends TestCase {
public HelloJdbcDao helloJdbcDao;
@Override
protected void setUp() throws Exception {
ApplicationContext ac = new ClassPathXmlApplicationContext("beans-jdbc.xml");
helloJdbcDao = (HelloJdbcDao) ac.getBean("helloJdbcDao");
}
public void testGetConn() throws SQLException{
System.out.println(helloJdbcDao.getConnection());
}
}
相关文章推荐
- Spring整合HIbernate时,三种数据库连接池的配置和比较
- Spring整合Hibernate时,三种数据库连接池的配置和比较
- spring hibernate整合时配置文件的事务部分(spring管理事务)
- spring和hibernate配置文件整合
- spring整合hibernate时配置文件错误
- Spring整合heibernate在hbm.xml配置出现错误org.hibernate.tuple.entity.PojoEntityTuplizer Caused by: org.hiberna
- Spring整合Struts2和Hibernate+Maven(二)之SSH的配置文件
- SpringMVC+Apache Shiro+JPA(hibernate)案例教学(一)整合配置
- Hibernate与Spring整合的一些配置问题(一)——LocalSessionFactoryBean
- hibernate配置数据库连接池的三种方法
- Hibernate与Spring整合,配置文件applicationContext.xml
- Spring3.3 整合 Hibernate3、MyBatis3.2 配置多数据源/动态切换数据源 方法
- Spring2.5整合Hibernate3.0中使用XML以tx来配置事务管理。
- Spring整合Hibernate的简单配置及操作
- hibernate整合spring的配置原理
- hibernate配置数据库连接池的三种方法
- Spring与Hibernate与Struts整合(一)配置文件
- Spring 整合 Hibernate 的一处简化配置
- Spring+Hibernate整合开发配置,完整实例
- hibernate和Spring整合时,hibernate映射文件配置方式