<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Vincent.Chan‘s Blog

    常用鏈接

    統計

    積分與排名

    網站

    最新評論

    使用 DBCP 作 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 的機制,在這兒,我們介紹最簡單的作法,只要幾行指令就可以完成了,請看範例區裡的程式及其說明。

    範例:

    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 publicstatic 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 publicstatic 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 }

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

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

    posted on 2006-03-23 00:02 Vincent.Chen 閱讀(416) 評論(0)  編輯  收藏 所屬分類: Java

    主站蜘蛛池模板: 国产AV无码专区亚洲AV漫画 | 亚洲中文字幕无码中文| 三年片在线观看免费大全电影| 久久精品国产精品亚洲艾草网美妙| 亚洲精品久久无码av片俺去也 | 最近中文字幕免费mv在线视频| 亚洲成人精品久久| 99爱视频99爱在线观看免费| 亚洲激情黄色小说| 一个人免费高清在线观看| 亚洲毛片基地4455ww| 日韩高清免费观看| 一边摸一边桶一边脱免费视频 | 亚洲AV无码一区二区三区电影| 日韩视频免费在线| 日韩一区二区三区免费播放| 亚洲Av无码乱码在线znlu| 成人A毛片免费观看网站| 亚洲人成网站影音先锋播放| 0588影视手机免费看片| 亚洲精品国产首次亮相| 亚洲人午夜射精精品日韩| 中文字幕无码日韩专区免费| 亚洲综合小说久久另类区| 全免费a级毛片免费**视频 | 未满十八18禁止免费无码网站| 亚洲狠狠狠一区二区三区| 免费看的一级毛片| 中文字幕一区二区免费| 2022年亚洲午夜一区二区福利| 无码一区二区三区AV免费| 一级毛片在线播放免费| 中文字幕亚洲免费无线观看日本| 永久免费av无码网站韩国毛片| 曰批全过程免费视频观看免费软件 | 91大神亚洲影视在线| 日本19禁啪啪无遮挡免费动图| a一级爱做片免费| 亚洲一级毛片免观看| 亚洲国产精品丝袜在线观看| 久久久久久夜精品精品免费啦|