a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > JSP > 正文

論JSP數據庫連接池的必要性

2024-09-05 00:20:07
字體:
來源:轉載
供稿:網友
  • 網站運營seo文章大全
  • 提供全面的站長運營經驗及seo技術!
  •   一般情況下,在使用開發基于數據庫的web程序時,傳統的模式基本是按以下步驟:
      
      1. 在主程序(如servlet、beans)中建立數據庫連接。
      
      2. 進行sql操作,取出數據。
      
      3. 斷開數據庫連接。
      
      使用這種模式開發,存在很多問題。首先,我們要為每一次web請求(例如察看某一篇文章的內容)建立一次數據庫連接,對于一次或幾次操作來講,或許你覺察不到系統的開銷,但是,對于web程序來講,即使在某一較短的時間段內,其操作請求數也遠遠不是一兩次,而是數十上百次(想想全世界的網友都有可能在您的網頁上查找資料),在這種情況下,系統開銷是相當大的。
      
      事實上,在一個基于數據庫的web系統中,建立數據庫連接的操作將是系統中代價最大的操作之一。很多時候,可能您的網站速度瓶頸就在于此。
      
      其次,使用傳統的模式,你必須去管理每一個連接,確保他們能被正確關閉,如果出現程序異常而導致某些連接未能關閉,將導致數據庫系統中的內存泄露,最終我們將不得不重啟數據庫。
      
      針對以上問題,我們首先想到可以采用一個全局的connection對象,創建后就不關閉,以后程序一直使用它,這樣就不存在每次創建、關閉連接的問題了。但是,同一個連接使用次數過多,將會導致連接的不穩定,進而會導致web server的頻頻重啟。
      
      故而,這種方法也不可取。實際上,我們可以使用連接池技術來解決上述問題。首先,介紹一下連接池技術的基本原理。顧名思義,連接池最基本的思想就是預先建立一些連接放置于內存對象中以備使用:
      
     

      如圖所示,當程序中需要建立數據庫連接時,只須從內存中取一個來用而不用新建。同樣,使用完畢后,只需放回內存即可。而連接的建立、斷開都有連接池自身來管理。同時,我們還可以通過設置連接池的參數來控制連接池中的連接數、每個連接的最大使用次數等等。通過使用連接池,將大大提高程序效率,同時,我們可以通過其自身的管理機制來監視數據庫連接的數量、使用情況等。下面我們以一個名為connectionpool的連接池為例來看看連接池的實現。先看看connectionpool的基本屬性:
      
      m_connectionpoolsize:
      連接池中連接數量下限
      m_connectionpoolmax:
      連接池中連接數量上限
      m_connectionusecount:
      一個連接的最大使用次數
      m_connectiontimeout:
      一個連接的最長空閑時間
      m_maxconnections = -1:
      同一時間的最大連接數
      m_timer:定時器
      
      這些屬性定義了連接池與其中的每個連接的有效狀態值。連接池的自我管理,實際上就是通過定時的對每個連接的狀態、連接的數量進行判斷而進行相應操作。其管理流程如下:
      
     

      通過上圖,我們可以定義出connectionpool要完成管理所需要的基本接口:
      
      public class connectionpool
      implements timerlistener
      {
      public boolean initialize()
      //連接池初始化
      public void destroy()
      //連接池的銷毀
      public synchronized java.sql.connection
      getconnection()
      //取一個連接
      public synchronized void close()
      //關閉一個連接
      private synchronized
      void removefrompool()
      //把一個連接從連接池中刪除
      private synchronized
      void fillpool()
      //維護連接池大小
      public synchronized
      void timerevent()
      //定時器事件處理函數
      }
      
      通過這幾個接口,已經可以完成連接池的基本管理。在timeevent()函數中完成連接池的狀態檢驗工作,fillpool()時連接池至少保持最小連接數。因為我們要保存每一個連接的狀態,所以還需要一個數據庫連接對象:
      
      class connectionobject
      {
      public java.sql.connection con;
      public boolean inuse;
      //是否被使用標志
      public long lastaccess;
      //最近一次開始使用時間
      public int usecount;
      //被使用次數
      }
      
      加入了connectionobject對象后,在connectionpool中操作的應該只是connectionobject,而其他進程需要的只是connectionobject的con屬性,因此我們再加入一個類,作為其他進程獲得與返回連接的接口:
      
      class conn
      {
      getconnection();
      //從連接池中取出一個有效連接
      closeconnection();
      //返回連接,此時并沒有關閉連接,只是放回了連接池
      destroypool();
      //銷毀連接池
      }
      
      最后我們的整個系統總的架構如下:
      
    發表評論 共有條評論
    用戶名: 密碼:
    驗證碼: 匿名發表
    主站蜘蛛池模板: 中文字幕色 | 性色视频在线观看 | 毛片免费在线观看 | 日韩xxxbbb| 欧美一级毛片免费看 | 操人网 | 国产精品毛片 | 久久精品国产99国产精品 | 涩涩久久 | 午夜影院网站 | 欧美色道| 精品久久久久久国产 | 亚洲视频中文字幕 | 女同理伦片在线观看禁男之园 | 亚洲国产精品成人 | 国产午夜精品在线 | 亚洲自拍一区在线观看 | 中文字幕第七页 | 久久久久久久久久97 | 一区二区免费播放 | 日本免费一区二区三区 | 久久久久久毛片 | igao视频| 97在线观看 | 美女视频黄色免费 | 三级免费网站 | 黄色在线小视频 | 国产精品91网站 | 国产精品女同一区二区 | 亚洲wu码 | 亚洲美女性视频 | 狠狠草视频 | 午夜精品久久久久久久久久久久 | 日本不卡精品 | 免费一级在线观看 | 天天干,夜夜操 | 欧美一级在线观看 | 国产www网站 | 欧美日韩在线视频一区二区 | 99爱免费视频 | 亚洲v日韩v综合v精品v |