JBOSS 點滴

          豐豐的博客

          導航

          <2013年10月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          統計

          公告

          我想成功,在老之前!

          常用鏈接

          留言簿(6)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          相冊

          收藏夾

          blogjava

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          連接池配置

          配置連接池

           本文旨在給程序開發人員提供一個比較具體的Tomcat連接池參考方案,為了提高文章的可讀性,文章前端引用了一位前輩的話,如果構成誤解,請多多諒解,本文不是從商業考慮的。有問題請聯系作者MSN:hpj2001(at)hotmail.com,Email:tocow(at)google.com。

          連接池簡介
             程序開發,存在很多問題:首先,每一次Web請求都要建立一次數據庫連接。建立連接是一個費時的活動,每次都得花費0.05s~1s的時間,而且系統還要分配內存資源。這個時間對于一次或幾次數據庫操作,或許感覺不出系統有多大的開銷。可是對于現在的Web應用,尤其是大型電子商務網站,同時有幾百人甚至幾千人在線是很正常的事。在這種情況下,頻繁的進行數據庫連接操作勢必占用很多的系統資源,網站的響應速度必定下降,嚴重的甚至會造成服務器的崩潰。不是危言聳聽,這就是制約某些電子商務網站發展的技術瓶頸問題。其次,對于每一次數據庫連接,使用完后都得斷開。否則,如果程序出現異常而未能關閉,將會導致數據庫系統中的內存泄漏,最終將不得不重啟數據庫。還有,這種開發不能控制被創建的連接對象數,系統資源會被毫無顧及的分配出去,如連接過多,也可能導致內存泄漏,服務器崩潰。
                數據庫連接池(connection pool)的工作原理:
                由上面的分析可以看出,問題的根源就在于對數據庫連接資源的低效管理。
          對于共享資源,有一個很著名的設計模式:資源池(Resource Pool)。該模式正是為了解決資源的頻繁分配、釋放所造成的問題。為解決上述問題,可以采用數據庫連接池技術。數據庫連接池的基本思想就是為數據庫連接建立一個“緩沖池”。預先在緩沖池中放入一定數量的連接,當需要建立數據庫連接時,只需從“緩沖池”中取出一個,使用完畢之后再放回去。我們可以通過設定連接池最大連接數來防止系統無盡的與數據庫連接。更為重要的是我們可以通過連接池的管理機制監視數據庫的連接的數量、使用情況,為系統開發、測試及性能調整提供依據。
          一、Tomcat一般性說明
          1、本壓縮包內的tomcat為apache-tomcat-5.5.20,截止到2006-10-12,是www.apache.org上最新的tomcat版本。
          2、Tomcat使用的端口都是默認的。兩個比較重要的端口說明,shutdown port:8005;non-SSL HTTP/1.1 Connector port:8080。
          3、涉及到修改的文件:
             a../ conf下server.xml、web.xml
             b../common/lib下增加ms-sql jdbc的三個jar包msbase.jar、mssqlserver.jar、msutil.jar
          二、Tomcat配置連接池方案
                 本文針對的是tomcat 5.5版本的連接池介紹,其它版本可能不適用。
                 數據源可以配置成全局的和局部的:可以在任意Context中引用全局的數據源,在某一Context配置的數據源,不能在其它Context引用它。理解了全局和局部數據源的關系,下面就來介紹一下詳細配置說明,如下:
          1、編輯打開./confCatalina/localhost/gdczsam.xml可以看到:
          <!--F hpj 2006-10-12 
              Defualt, we set all different Resources as Global-Resource[which defined in server.xml <GlobalNamingResources></GlobalNamingResources>], 
              and get special Resource we needed in per-web-application contexts from Global-Resource.
              otherwise,we can set Resource we needed in any special Context, all two solutions are offered.

              A.during application development set reloadable="true", when deployed production set reloadable="false"

              B.many other datebase, url and driverClassName like underside list:
                1.ms-sql       driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
                               url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=SAM_GDCZ"
          加載包mssqlserver.jar、msbase.jar、msutil.jar.

                2.oracle       driverClassName="oracle.jdbc.driver.OracleDriver"
                               url="jdbc:oracle:thin:@127.0.0.1:1521:SAM_GDCZ"

                3.postgresql   driverClassName="org.postgresql.Driver"
                               url="jdbc:postgresql://127.0.0.1:5432/SAM_GDCZ"

                4.mysql        driverClassName="org.gjt.mm.mysql.Driver"[old mySql jdbc driver]
                               driverClassName="com.mysql.jdbc.Driver"
                               url="jdbc:mysql://127.0.0.1:3306/SAM_GDCZ"
          -->

          <Context docBase="setup directory" path="/gdczsam" reloadable="true" cookies="true" crossContext="true" privileged="true" antiResourceLocking="false" antiJARLocking="false">

          <!--
              <Resource name="jdbc/mssql-SAM_GDCZ"
                        auth="Container"
                          type="javax.sql.DataSource"
                          driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
                          url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=SAM_GDCZ"
                          username="sa"
                          password=""
                          maxIdle="30"
                          maxWait="10000"
                          maxActive="100"/>
          -->

          <!--F hpj 2006-10-12 
              name: The name of the resource link to be created, which will be used in this web-application context environment.
              global: The name of the linked global resource in the global JNDI context.
              type: The fully qualified Java class name expected by the web application when it performs lookup for this resource link.
          -->
             <ResourceLink name="mssql-SAM_GDCZ" global="jdbc/mssql-SAM_GDCZ" type="javax.sql.DataSource"/>

          </Context>
                   本文提供的tomcat連接池的默認配置如上述,代碼的說明性很強,既采用在./ conf/server.xml配置的全局數據源,然后在指定的Context中調用的方式。
                   server.xml中的數據源就是上述代碼段注釋的Resource節點,被包含在server.xml中的GlobalNamingResources節點中。
                   其中需要注意的是,該數據源需要在./conf/web.xml中加入一段聲明,如下:
              <resource-ref>
                  <descrīption>DB Connection</descrīption>
                  <res-ref-name>jdbc/mssql-SAM_GDCZ</res-ref-name>
                  <res-type>javax.sql.DataSource</res-type>
                  <res-auth>Container</res-auth>
              </resource-ref>
          2、第二種tomcat數據源的配置方式是本人推薦的:不在server.xml的GlobalNamingResources節點中加入Resource節點,而是對每個指定的Context配置數據源,這樣結構比較清晰。采用這種方式的gdczsam.xml配置如下:
          <Context docBase="setup directory" path="/gdczsam" reloadable="true" cookies="true" crossContext="true" privileged="true" antiResourceLocking="false" antiJARLocking="false">

              <Resource name="jdbc/mssql-SAM_GDCZ"
                       auth="Container"
                          type="javax.sql.DataSource"
                          driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
                          url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=SAM_GDCZ"
                          username="sa"
                          password=""
                          maxIdle="30"
                          maxWait="10000"
                          maxActive="100"/>

          </Context>
          3、以上兩種方式,只要是不同的數據源都必須在./conf/web.xml中加入resource-ref聲明。
          4、產品部署時,不論使用什么方式來部署程序,都需要在./confCatalina/localhost中加入類似gdczsam.xml的文件來配置數據源。

          posted on 2013-10-26 16:39 半導體 閱讀(201) 評論(0)  編輯  收藏 所屬分類: Eclipse

          主站蜘蛛池模板: 微山县| 察隅县| 闻喜县| 临清市| 保德县| 周口市| 富川| 依兰县| 泗水县| 文登市| 海南省| 九龙县| 水城县| 延庆县| 巴马| 海口市| 如东县| 偏关县| 内黄县| 林州市| 河北区| 河南省| 维西| 古丈县| 满城县| 涟源市| 西宁市| 达拉特旗| 张掖市| 哈尔滨市| 柳州市| 泰州市| 金堂县| 伊吾县| 扶余县| 当涂县| 建昌县| 会昌县| 庆云县| 祁门县| 河间市|