Java中三种流行的数据连接池

在使用数据连接池之前,首先我们要知道使用连接池是什么?连接池就是创建和管理一个连接的缓冲池技术,这些连接随时会被需要他们的线程调用。那我们使用数据连接池有什么好处呢?在我们连接数据库的时候如果不使用数据连接池,每一次访问数据库都去创建一个连接,这样会很消耗时间和项目的性能。
下面我们开始说一下Java中三种流行的数据库连接池:
(1)C3P0连接池: C3P0官网为什么把它放在第一位呢,我想大家对它应该是最熟悉的了,上学或者培训的时候老师都讲过。
C3P0是一个开源数据连接池,Hibernate3.0默认自带的数据连接池,性能比较稳定。
C3P0配置(以MySQL为例):
st1:下载c3p0-0.9.1.2.jar
st2:在项目源路径下创建XXX.properties
数据库连接实例:
jdbc.driverClass=com.mysql.jdbc.Driver
	jdbc.url=jdbc:mysql:///test
	jdbc.user=root
	jdbc.pwd=root
	c3p0.minPoolSize=2
	c3p0.maxPoolSize=10
st3:创建java类,获取连接。
/**
 * 
 */
package com.test.dbUtil

import java.beans.PropertyVetoException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import com.mchange.v2.c3p0.ComboPooledDataSource;

/**
 * @author DuZhuo
 * 数据库工具类
 */
public class DBUtil {
	private static DBUtil dbutil;
	private static Properties p;
	
	
	static{
		InputStream is=Thread.currentThread().getContextClassLoader().getResourceAsStream("xxx.properties");
		p=new Properties();
		try {
			p.load(is);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	
	private DBUtil(){
		
	}
	public static DBUtil getDBUtil(){
		
		if(dbutil==null){
			dbutil=new DBUtil();
		}
		return dbutil;
	} 
	
	/**
	 * 根据条件获取连接池
	 * @param datasourcename
	 * @return
	 */
	public static ComboPooledDataSource getComboPooledDataSource(String datasourcename){
		//创建一个连接池对象
		ComboPooledDataSource cpds=new ComboPooledDataSource();
		try {
			cpds.setDriverClass(p.getProperty(datasourcename+".JDBCDriver"));
		} catch (PropertyVetoException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		cpds.setJdbcUrl(p.getProperty(datasourcename+".url"));
		cpds.setUser(p.getProperty(datasourcename+".UserId"));
		cpds.setPassword(p.getProperty(datasourcename+".password"));
		cpds.setInitialPoolSize(Integer.parseInt(p.getProperty(datasourcename+".initConns")));
		cpds.setMaxPoolSize(Integer.parseInt(p.getProperty(datasourcename+".maxConns")));
		return cpds;
		
	} 
	
}
在SSH中spring.xml中配置C3P0
<context:property-placeholder location="classpath:jdbc.properties"/>
	
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<property name="driverClass" value="${jdbc.driverClass}"/>
		<property name="jdbcUrl" value="${jdbc.url}"/>
		<property name="user" value="${jdbc.user}"/>
		<property name="password" value="${jdbc.pwd}"/>
		
		<property name="minPoolSize" value="${c3p0.minPoolSize}"/>
		<property name="maxPoolSize" value="${c3p0.maxPoolSize}"/>
	</bean>
在SSH中hibernate.cfg.xml(该配置不使用properties文件)
<!-- 1. 配置数据库方言 -->
	<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>

	<!-- 2. 数据库连接参数 -->
	<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
	<property name="connection.url">jdbc:mysql://localhost:3306/lianxi</property>
	<property name="connection.username">root</property>
	<property name="connection.password">201314</property>

	<!-- 3. 配置c3p0连接池 -->
	<property name="connection.provider_class">org.hibernate.service.jdbc.connections.internal.C3P0ConnectionProvider</property>

	<!-- 设置c3p0的优化参数 -->
	<property name="c3p0.min_size">5</property>
	<property name="c3p0.max_size">30</property>
	<property name="c3p0.timeout">1800</property>
	<property name="c3p0.max_statements">50</property>

(2)DBCP连接池: DBCP官网
DBCP是Apache下面专门为java提供的数据连接池,也是Tomcat数据连接的组件。(注:由于bug太多,Hibernate已经不再支持。)
DBCP配置(以MySQL为例):
st1:导入common-dbcp.jar、common-pool.jar、common-collections.jar
st2:在项目源路径下创建XXX.properties
数据库连接实例:
jdbc.driverClass=com.mysql.jdbc.Driver
	jdbc.url=jdbc:mysql:///test
	jdbc.user=root
	jdbc.pwd=root

st3:java类中调用
public static DataSource getDataSource(){
		//创建一个连接池对象
		DataSource ds=null;
		BasicDataSource bds=new BasicDataSource();
		try {
			ds.setDriverClass(p.getProperty("jdbc.driverClass"));
		} catch (PropertyVetoException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		bds.setJdbcUrl(p.getProperty("jdbc.url"));
		bds.setUser(p.getProperty("jdbc.user"));
		bds.setPassword(p.getProperty("jdbc.pwd"));
		ds=bds;
		return ds;
		
	} 
SSH框架Spring中调用
<bean id="dataSource" destroy-method="close"
     class="org.apache.commons.dbcp.BasicDataSource">
      <property name="driverClassName" value="${jdbc.driverClass}"/>
      <property name="url" value="${jdbc.url}"/>
      <property name="username" value="${jdbc.user}"/>
      <property name="password" value="${jdbc.pwd}"/>
    </bean>

(3)Proxool连接池: Proxool官网
Proxool是sourceforge下面的一个开源数据连接池,最大的特色便是Proxool提供了监视的功能,便于发现连接泄漏的情况。 
Proxool配置(以Oracle为例):
st1:导入proxool-0.9.0RC3.jar
str2:项目源目录下创建proxool.xml
<?xml version="1.0" encoding="utf-8"?> 
       <something-else-entirely> 
	<proxool> 
	  <alias>test</alias> 
	  <driver-url>jdbc:oracle:thin:@127.0.0.1:1521:test</driver-url> 
	  <driver-class>oracle.jdbc.driver.OracleDriver</driver-class> 
	  <driver-properties> 
	    <property name="user" value="test"/> 
	    <property name="password" value="test"/> 
	  </driver-properties> 
	  <house-keeping-sleep-time>90000</house-keeping-sleep-time> 
	  <prototype-count>10</prototype-count> 
	  <maximum-connection-count>100</maximum-connection-count> 
	  <minimum-connection-count>20</minimum-connection-count> 
	  <maximum-active-time>900000</maximum-active-time> 
	</proxool> 
      </something-else-entirely>
st3:在web.xml中初始化proxool
<!--proxool-->
     <servlet>
       <servlet-name>proxoolServletConfigurator</servlet-name>
       <servlet-class>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class>
       <init-param>
         <param-name>xmlFile</param-name>
         <param-value>/WEB-INF/classes/proxool.xml</param-value>
       </init-param>
       <load-on-startup>1</load-on-startup>
     </servlet>
     <servlet-mapping>
        <servlet-name>proxoolServletConfigurator</servlet-name>
        <!-- 访问http://localhost:8080/项目名称/proxool即可看到页面 -->
        <url-pattern>/proxool</url-pattern>
     </servlet-mapping>
st4:创建连接
 Connection conn = null;
        try {
                Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
                conn = DriverManager.getConnection("proxool.test"); //使用proxool连接池
        }
在SSH中Hibernate的配置
<hibernate-configuration>
       <session-factory>
        <property name="hibernate.proxool.pool_alias">test</property>
	<property name="hibernate.proxool.xml">proxool.xml</property>
	<property name="hibernate.connection.provider_class">org.hibernate.connection.ProxoolConnectionProvider</property>
	<property name="hibernate.proxool.existing_pool">true</property>
	<property name="dialect">oracle.jdbc.driver.OracleDriver</property>
	<property name="hibernate.cache.use_query_cache">true</property>
       </session-factory>
     </hibernate-configuration>
在SSH中Spring的配置
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
      <property name="driverClassName">
        <value>org.logicalcobwebs.proxool.ProxoolDriver</value>
      </property>
      <property name="url">
        <value>proxool.test</value>
    </property>
</bean>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值