Java中三种流行的数据连接池
2014-04-25 12:38
267 查看
在使用数据连接池之前,首先我们要知道使用连接池是什么?连接池就是创建和管理一个连接的缓冲池技术,这些连接随时会被需要他们的线程调用。那我们使用数据连接池有什么好处呢?在我们连接数据库的时候如果不使用数据连接池,每一次访问数据库都去创建一个连接,这样会很消耗时间和项目的性能。
下面我们开始说一下Java中三种流行的数据库连接池:
(1)C3P0连接池:C3P0官网(为什么把它放在第一位呢,我想大家对它应该是最熟悉的了,上学或者培训的时候老师都讲过。)
C3P0是一个开源数据连接池,Hibernate3.0默认自带的数据连接池,性能比较稳定。
C3P0配置(以MySQL为例):
st1:下载c3p0-0.9.1.2.jar
st2:在项目源路径下创建XXX.properties
数据库连接实例:
st3:创建java类,获取连接。
在SSH中spring.xml中配置C3P0
在SSH中hibernate.cfg.xml(该配置不使用properties文件)
(2)DBCP连接池:DBCP官网
DBCP是Apache下面专门为java提供的数据连接池,也是Tomcat数据连接的组件。(注:由于bug太多,Hibernate已经不再支持。)
DBCP配置(以MySQL为例):
st1:导入common-dbcp.jar、common-pool.jar、common-collections.jar
st2:在项目源路径下创建XXX.properties
数据库连接实例:
st3:java类中调用
SSH框架Spring中调用
(3)Proxool连接池:Proxool官网
Proxool是sourceforge下面的一个开源数据连接池,最大的特色便是Proxool提供了监视的功能,便于发现连接泄漏的情况。
Proxool配置(以Oracle为例):
st1:导入proxool-0.9.0RC3.jar
str2:项目源目录下创建proxool.xml
st3:在web.xml中初始化proxool
st4:创建连接
在SSH中Hibernate的配置
在SSH中Spring的配置
下面我们开始说一下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>
相关文章推荐
- 黑马 总结二:Java 数据连接池简单实现
- Java从键盘读取数据的三种方式
- 七、初学Java多线程:向线程传递数据的三种方法(没感觉三种方法有什么区别?)
- Java多线程初学者指南(7):向线程传递数据的三种方法
- java数据连接池 c3p0 dbcp proxool
- java数据类型(八种基本数据类型+三种引用类型)
- Java三大框架之——Hibernate中的三种数据持久状态和缓存机制
- Gson在解析java数据格式的三种范例
- 【JAVA】java中实现map集合的数据存取详解三种方法。Android程序员也是要会写的
- java中没有2进制的数据类型,对二进制的操作,需要使用共三种操作符
- 四个流行的Java连接池
- hibernate系列二:hibernate中java对象的三种状态及数据更新的4种方式
- 7. 初学Java多线程:向线程传递数据的三种方法
- 【JAVA】java中实现map集合的数据存取详解三种方法。Android程序员也是要会写的
- java 将数据写到文本文件末尾三种方法
- Java多线程初学者指南(7):向线程传递数据的三种方法
- Java多线程:向线程传递数据的三种方法
- 四大流行的java连接池之BoneCP篇
- 四大流行的java连接池之BoneCP篇
- Java多线程: 向线程传递数据的三种方法(转)