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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章