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

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