45fan.com - 路饭网

搜索: 您的位置主页 > 网络频道 > 阅读资讯:如何使用jakata DBCP package作DB Connection pooling?

如何使用jakata DBCP package作DB Connection pooling?

2016-09-05 08:34:25 来源:www.45fan.com 【

如何使用jakata DBCP package作DB Connection pooling?

 
一般來說,在多人使用的系統中,應用程式若沒有運用 Connection pooling 的機制,會造成很大的效能問題,Connection 開開關關,除了慢,也會耗損資料庫伺服器的資源。大部分的 AP Server 都有提供 Connection pooling 的機制,程式設計師並無須去顧慮這個機制是如何運作的,只要懂得設定相關的參數即可。

假如說,某種狀況下,我們必須自行建置 Connection pooling 的機制時,該如何進行呢?自己寫當然是非常不划算的,況且也不一定寫的好,在這裡,我們使用 jakata project 裡的一個子專案 DBCP,來快速的建置一個隨處可用的 Connection pooling 機制。

在 Tomcat 裡,DBCP 是內建的,用來管理 DB Connection pooling。這個機制是可移植且可獨立出來使用的,要在你的運用程式中加上 DBCP 的功能,你必須至 http://jakarta.apache.org/commons/index.html 這個網址,找到該網頁內的 Components,共有三個必須下載:Collections 、 DBCP 、 Pool 。DBCP 是運用 Collections 及 Pool 這二個基礎的 Components 所設計出來的。當然,如果你有安裝 Tomcat server,最佳的方式是至 $TOMCAT_HOME/common/lib/ 目錄下去取得,保證版本的配合度不會出現問題。在 Tomcat server 裡,以 Tomcat 5.0.19 版內附的最新版本,這三個 Components 的檔名分別是 commons-collections.jar 、 commons-pool-1.1.jar 及 commons-dbcp-1.1.jar。

取得使用 DBCP 必備的 jar 檔後,請記得將這些 jar 檔,放置到 CLASSPATH 中,或直接放至 $JAVA_HOME/jre/lib/ext/ 目錄內。不過,由於 DBCP 有運用到 DataSource 的功能,而這功能是 J2EE 才有的,所以你還必須去下載 J2EE 的一個 javax.jar 檔。

環境建置好之後,接下來就可以開始設計 Connection Pooling 的機制,在這兒,我們介紹最簡單的作法,只要幾行指令就可以完成了,請看範例區裡的程式及其說明。

完成這個程式後,接下來在你的應用程式裡,用 DBConnect.getConnection() 來取得 DB Connection,就能享受到 Connection Pooling 的功能了。

在實際的運作中,這個範例有加上偵錯指令,會顯示出目前 Connection Pool 裡,有多少個 Idle 的 Connection 及多少個 Active 的 Connection,可供作為系統運作的參數調整依據。

範例:

01 package util;
02 
03 import java.sql.*;
04 import javax.naming.*;
05 import javax.sql.*;
06 
07 import org.apache.commons.dbcp.BasicDataSource;
08 
09 public class DBConnect {
10  static DataSource dataSource = null;
11 
12  public static DataSource setupDataSource( String sDrvName, String sUserName,
13    String sPwd, String connectURI ) {
14    BasicDataSource ds = new BasicDataSource();
15    ds.setDriverClassName( sDrvName );
16    ds.setUsername( sUserName );
17    ds.setPassword( sPwd );
18    ds.setUrl( connectURI );
19    ds.setMaxActive( 50 );
20    ds.setMaxIdle( 10 );
21    ds.setMaxWait( 10000 ); // 10 seconds
22    return ds;
23  }
24 
25 
26  // static init of the class
27  static {
28   try {
29    System.setProperty( "jdbc.drivers", "oracle.jdbc.driver.OracleDriver" );
30    Class.forName( "oracle.jdbc.driver.OracleDriver" );
31 
32    dataSource = setupDataSource( "oracle.jdbc.driver.OracleDriver", "username",
33     "password", "jdbc:oracle:thin:@192.168.0.1:1521:SID" );
34   }
35   catch (Exception e) {
36    System.out.println( "DBConnect.java => Unable to load driver." + e.getMessage() );
37   }
38  }
39 
40  /**
41  * 空的建構元,不作任何處理動作。
42  */
43  public DBConnect() {}
44 
45  /**
46  * 取得 DB Connection.
47  */
48  public static Connection getConnection() throws SQLException,ClassNotFoundException {
49   BasicDataSource bds = (BasicDataSource) dataSource;
50   System.out.println("NumActive: " + bds.getNumActive() + ","
51    + "NumIdle: " + bds.getNumIdle() );
52   return dataSource.getConnection();
53  }
54 }
 

本文地址:http://www.45fan.com/a/question/72602.html
Tags: DBCP jakata package
编辑:路饭网
关于我们 | 联系我们 | 友情链接 | 网站地图 | Sitemap | App | 返回顶部