<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)  編輯  收藏 所屬分類: 每日積累
    主站蜘蛛池模板: 亚洲第一页在线播放| 亚洲精品第一国产综合精品| 男人天堂免费视频| 久久亚洲AV成人出白浆无码国产 | 一个人看的在线免费视频| 亚洲成AV人片天堂网无码| 成年轻人网站色免费看| 国产裸体美女永久免费无遮挡 | 亚洲av无码有乱码在线观看| 亚洲精品无码专区在线在线播放| 无码国产精品一区二区免费虚拟VR | 免费无码H肉动漫在线观看麻豆| 亚洲avav天堂av在线网爱情| 亚洲欧洲日产国码一级毛片| 中文字幕在线免费| 乱淫片免费影院观看| 亚洲国色天香视频| 亚洲男人第一无码aⅴ网站| 4hu四虎最新免费地址| 久久不见久久见免费影院www日本| 亚洲欧洲国产综合| 亚洲日韩中文字幕在线播放| 在线视频免费国产成人| 99久久精品免费视频| 深夜免费在线视频| 亚洲综合av一区二区三区不卡 | 成人在线免费看片| 国产免费高清69式视频在线观看| 久久国产亚洲精品| 亚洲福利视频网站| 国产亚洲精品自在久久| vvvv99日韩精品亚洲| 毛片视频免费观看| 国产99视频精品免费专区| 免费一区二区无码视频在线播放 | 亚洲av永久无码精品秋霞电影影院| 超pen个人视频国产免费观看| 亚洲一级免费视频| 国产va在线观看免费| 99在线热播精品免费99热| 特级av毛片免费观看|