當前位置:編程學習大全網 - 源碼下載 - Java開發常用的幾個數據庫連接池

Java開發常用的幾個數據庫連接池

數據庫連接池的好處是不言而喻的,現在大部分的application

server都提供自己的數據庫連接池方案,此時,只要按照application server的文檔說明,正確配置,即可在應用中享受到數據庫連接池的好處。

但是,有些時候,我們的應用是個獨立的java

application,並不是普通的WEB/J2EE應用,而且是單獨運行的,不要什麽application

server的配合,這種情況下,我們就需要建立自己的數據庫連接池方案了。

1、 DBCP

DBCP是Apache的壹個開源項目:

commons.dbcp

DBCP依賴Apache的另外2個開源項目

commons.collections和commons.pool

dbcp包,目前版本是1.2.1:mons/dbcp/

pool包,目前版本是1.3:mons/pool/,

common-collections包:mons/collections/

下載這些包並將這些包的路徑添加到classpath中就可以使用dbcp做為項目中的數據庫連接池使用了。

在建立我們自己的數據庫連接池時,可以使用xml文件來傳入需要的參數,這裏只使用hard

code的方式來簡單介紹,所有需要我們自己寫的代碼很少,只要建立壹個文件如下:

import

org.apache.commons.dbcp.BasicDataSource;

import

org.apache.commons.dbcp.BasicDataSourceFactory;

import

java.sql.SQLException;

import java.sql.Connection;

import

java.util.Properties;

public class ConnectionSource {

private static BasicDataSource dataSource =

null;

public ConnectionSource() {

}

public static void init() {

if (dataSource != null) {

try

{

dataSource.close();

} catch (Exception e)

{

}

dataSource = null;

}

try {

Properties p = new

Properties();

p.setProperty("driverClassName",

"oracle.jdbc.driver.OracleDriver");

p.setProperty("url",

"jdbc:oracle:thin:@192.168.0.1:1521:testDB");

p.setProperty("password", "scott");

p.setProperty("username",

"tiger");

p.setProperty("maxActive", "30");

p.setProperty("maxIdle", "10");

p.setProperty("maxWait",

"1000");

p.setProperty("removeAbandoned",

"false");

p.setProperty("removeAbandonedTimeout",

"120");

p.setProperty("testOnBorrow", "true");

p.setProperty("logAbandoned", "true");

dataSource = (BasicDataSource)

BasicDataSourceFactory.createDataSource(p);

} catch (Exception e) {

}

}

public static synchronized Connection

getConnection() throws SQLException {

if (dataSource == null) {

init();

}

Connection conn = null;

if (dataSource != null) {

conn = dataSource.getConnection();

}

return conn;

}

}

接下來,在我們的應用中,只要簡單地使用ConnectionSource.getConnection()就可以取得連接池中的數據庫連接,享受數據庫連接帶給我們的好處了。當我們使用完取得的數據庫連接後,只要簡單地使用connection.close()就可把此連接返回到連接池中,至於為什麽不是直接關閉此連接,而是返回給連接池,這是因為dbcp使用委派模型來實現Connection接口了。

在使用Properties來創建BasicDataSource時,有很多參數可以設置,比較重要的還有:

testOnBorrow、testOnReturn、testWhileIdle,他們的意思是當是取得連接、返回連接或連接空閑時是否進行有效性驗證(即是否還和數據庫連通的),默認都為false。所以當數據庫連接因為某種原因斷掉後,再從連接池中取得的連接,實際上可能是無效的連接了,所以,為了確保取得的連接是有效的,

可以把把這些屬性設為true。當進行校驗時,需要另壹個參數:validationQuery,對oracle來說,可以是:SELECT COUNT(*) FROM

DUAL,實際上就是個簡單的SQL語句,驗證時,就是把這個SQL語句在數據庫上跑壹下而已,如果連接正常的,當然就有結果返回了。

還有2個參數:timeBetweenEvictionRunsMillis 和

minEvictableIdleTimeMillis,

他們兩個配合,可以持續更新連接池中的連接對象,當timeBetweenEvictionRunsMillis

大於0時,每過timeBetweenEvictionRunsMillis

時間,就會啟動壹個線程,校驗連接池中閑置時間超過minEvictableIdleTimeMillis的連接對象。

還有其他的壹些參數,可以參考源代碼。

2、

C3P0:

C3P0是壹個開放源代碼的JDBC連接池,C3PO

連接池是壹個優秀的連接池,推薦使用。C3PO實現了JDBC3.0規範的部分功能,因而性能更加突出,包括了實現jdbc3和jdbc2擴展規範說明的Connection 和Statement 池的DataSources 對象。

下載地址:.systex.utils.web;

import java.beans.PropertyVetoException;

import

java.sql.Connection;

import java.sql.SQLException;

import

javax.sql.DataSource;

import

com.mchange.v2.c3p0.ComboPooledDataSource;

public class C3PODataSource {

private static

ComboPooledDataSource dataSource = null;

private static final String driver

= "com.mysql.jdbc.Driver";

private static final String url =

"jdbc:mysql://localhost:3306/wyd";

private static final String userName =

"root";

private static final String password = "root";

public static DataSource getDataSource() {

if

(dataSource == null) {

dataSource = new ComboPooledDataSource();

try

{

dataSource.setDriverClass(driver);

} catch (PropertyVetoException

e) {

System.out.println("DataSource Load Driver

Exception!!");

e.printStackTrace();

}

dataSource.setJdbcUrl(url);

dataSource.setUser(userName);

dataSource.setPassword(password);

//

設置連接池最大連接容量

dataSource.setMaxPoolSize(20);

//

設置連接池最小連接容量

dataSource.setMinPoolSize(2);

//

設置連接池最大statements對象容量

dataSource.setMaxStatements(100);

}

return

dataSource;

}

public static Connection getConnection() throws

SQLException {

return

C3PODataSource.getDataSource().getConnection();

}

}

3、 Proxool

這是壹個Java SQL

Driver驅動程序,提供了對妳選擇的其它類型的驅動程序的連接池封裝。可以非常簡單的移植到現存的代碼中。完全可配置。快速,成熟,健壯。可以透明地為妳現存的JDBC驅動程序增加連接池功能。

官方網站: /

下載地址:/download.html

  • 上一篇:紅樓夢的詩詞
  • 下一篇:外匯相對實力指數
  • copyright 2024編程學習大全網