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

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

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

    隨筆-51  評論-14  文章-0  trackbacks-0
    數據庫連接是一種關鍵的有限的昂貴的資源,這一點在多用戶的網頁應用程序中體現得尤為突出。對數據庫連接的管理能顯著影響到整個應用程序的伸縮性和健壯性,影響到程序的性能指標。數據庫連接池正是針對這個問題提出來的。

    數據庫連接池負責分配、管理和釋放數據庫連接,它允許應用程序重復使用一個現有的數據庫連接,而再不是重新建立一個;釋放空閑時間超過最大空閑時間的數據庫連接來避免因為沒有釋放數據庫連接而引起的數據庫連接遺漏。這項技術能明顯提高對數據庫操作的性能。

    數據庫連接池在初始化時將創建一定數量的數據庫連接放到連接池中,這些數據庫連接的數量是由最小數據庫連接數來設定的。無論這些數據庫連接是否被使用,連接池都將一直保證至少擁有這么多的連接數量。連接池的最大數據庫連接數量限定了這個連接池能占有的最大連接數,當應用程序向連接池請求的連接數超過最大連接數量時,這些請求將被加入到等待隊列中。數據庫連接池的最小連接數和最大連接數的設置要考慮到下列幾個因素:

    1) 最小連接數是連接池一直保持的數據庫連接,所以如果應用程序對數據庫連接的使用量不大,將會有大量的數據庫連接資源被浪費;

    2) 最大連接數是連接池能申請的最大連接數,如果數據庫連接請求超過此數,后面的數據庫連接請求將被加入到等待隊列中,這會影響之后的數據庫操作。

    3) 如果最小連接數與最大連接數相差太大,那么最先的連接請求將會獲利,之后超過最小連接數量的連接請求等價于建立一個新的數據庫連接。不過,這些大于最小連接數的數據庫連接在使用完不會馬上被釋放,它將被放到連接池中等待重復使用或是空閑超時后被釋放。

    在傳統的兩層結構中,客戶端程序在啟動時打開數據庫連接,在退出程序時關閉數據庫連接。這樣,在整個程序運行中,每個客戶端始終占用一個數據庫連接,即使在大量沒有數據庫操作的空閑時間,如用戶輸入數據時,從而造成數據庫連接的使用效率低下。

    在三層結構模式中,數據庫連接通過中間層的連接池管理。只有當用戶真正需要進行數據庫操作時,中間層才從連接池申請一個連接,數據庫操作完畢,連接立即釋放到連接池中,以供其他用戶使用。這樣,不僅大大提高了數據庫連接的使用效率,使得大量用戶可以共享較少的數據庫連接,而且省去了建立連接的時間。

    連接池的配置使用

    數據庫連接池是應用服務器的一項基本功能,我們以Apusic Application Server為例,來說明JDBC連接池的配置使用。

    Apusic JDBC連接池提供對多種數據庫的支持,如Oracle、MS SqlServer、Sybase、Informix、DB2等。

    Apusic JDBC連接池可以通過數據庫本身的JDBC Driver連接到數據庫,也可以通過JDBC-ODBC橋連接到數據庫。下面我們以Oracle為例說明如何配置連接池:

    Oracle數據庫的JDBC Driver包文件classes111.zip在/usr/oracle/jdbc/lib(假設oracle的安裝目錄是/usr/oracle)目錄下,首先將classes111.zip加入到系統的CLASSPATH中。然后在apusic/config/apusic.conf(假設安裝目錄為apusic) 中作如下設置:

    <SERVICE

    CLASS="com.apusic.jdbc.PoolManager"

    NAME="JdbcPool:name=jdbc/sample"

    >

    <ATTRIBUTE NAME="ExpirationTime" VALUE="300"/>

    <ATTRIBUTE NAME="MinCapacity" VALUE="5"/>

    <ATTRIBUTE NAME="URL" VALUE="jdbc:oracle:thin:@192.168.19.136:1521:orcl"/>

    <ATTRIBUTE NAME="ConnectionProperties" VALUE="user=gtj,password=abc123"/>

    <ATTRIBUTE NAME="DriverClassName" VALUE="oracle.jdbc.driver.OracleDriver" />

    <ATTRIBUTE NAME="MaxCapacity" VALUE="30"/>

    </SERVICE>

    ExpirationTime: 超時時間,單位是秒。當一個數據庫連接超過expirationTime設定時間不被使用

    時,系統會自動關閉這個數據庫連接。默認值為300秒

    MinCapacity: 最小連接數

    URL: 數據庫的URL

    ConnectionProperties: 連接屬性,其中:user用戶名,password密碼

    DriverClassName: JDBC驅動程序類名

    MaxCapacity: 最大連接數

    192.168.19.136: oracle所在計算機的IP地址。

    調用連接池

    我們以一個JSP程序為例,說明如何使用連接池。首先通過JNDI得到DataSource,再的得到連接Connection,如下例所示:

    <html>

    <head>

    <title>Jsp sample</title>

    </head>

    <body>

    <p>

    <%@ page contentType="text/html;charset=gb2312" %>

    <%@ page import="

    java.sql.*,

    javax.naming.*,

    javax.sql.*

    "%>

    <%

    try{

    Context ctx = new InitialContext();

    DataSource ds = (DataSource)ctx.lookup("jdbc/sample");

    Connection con = ds.getConnection();

    Statement stmt = con.createStatement();

    ResultSet rs = stmt.executeQuery("select ENAME from EMP");

    while(rs.next()){

    out.println("<p>" + rs.getString(1));

    }

    rs.close();

    stmt.close();

    }catch(Exception e){

    System.out.println("jsp:" + e.getMessage());

    }finally{

    try{

    con.close();

    }catch(Exception e1){}

    }

    %>

    </body>

    </html>

    posted on 2008-06-15 14:30 Hank1026 閱讀(13354) 評論(0)  編輯  收藏 所屬分類: 每日積累
    主站蜘蛛池模板: 很黄很黄的网站免费的| 一区二区三区亚洲视频| 99在线精品视频观看免费| 国产亚洲精品无码成人| 亚洲一本之道高清乱码| 一个人看的www在线免费视频| 5g影院5g天天爽永久免费影院 | 亚洲第一视频网站| 亚洲美国产亚洲AV| 在线观看免费av网站| 亚洲国产高清精品线久久| 久久精品亚洲精品国产色婷| 高潮毛片无遮挡高清免费| 中文字幕影片免费在线观看| 亚洲AV无码久久精品狠狠爱浪潮| 狠狠色伊人亚洲综合网站色| 免费无码一区二区三区| 亚洲综合av永久无码精品一区二区 | 亚洲a一级免费视频| 亚洲国产综合久久天堂| 亚洲AV日韩AV一区二区三曲| 波多野结衣免费在线| 亚洲乱亚洲乱妇24p| 亚洲第一网站男人都懂| 免费看搞黄视频网站| 亚洲中文字幕无码久久2017| 日韩成人免费视频| 久久精品国产亚洲一区二区| 精品国产呦系列在线观看免费| 国产免费黄色大片| 国产精品亚洲小说专区| 免费无码又爽又高潮视频| 亚洲中文字幕一区精品自拍| 黄页网站在线看免费| 激情综合亚洲色婷婷五月| 国产91久久久久久久免费| 日韩精品无码免费专区网站 | 亚洲国产精品一区二区三区久久 | 亚洲国产成人精品久久久国产成人一区二区三区综 | 特级aa**毛片免费观看| 亚洲国产综合91精品麻豆|