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

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

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

    心的方向

    新的征途......
    posts - 75,comments - 19,trackbacks - 0
     

    tomcat的數(shù)據(jù)庫連接池的配置

    環(huán)境:
    1.
    數(shù)據(jù)庫:mysql
    2.
    數(shù)據(jù)庫驅(qū)動程序:org.gjt.mm.mysql.Driver
    JNDI
    Java Naming and Directory Interface)概述:
    Tomcat4
    5)提供了一個與Java Enterprise Edition應(yīng)用服務(wù)相兼容的JNDI--InitialContext實現(xiàn)實例。它的初始數(shù)據(jù)設(shè)置在$CATALINA_HOME/conf/server.xml文件里,并可能在網(wǎng)頁應(yīng)用環(huán)境描述(/WEB-INF/web.xml)里被下列元素引用:
    1) --
    環(huán)境入口,設(shè)置應(yīng)用程序如何操作。
    2) --
    資源參數(shù),一般是數(shù)據(jù)庫驅(qū)動程序、JavaMail Session、自定義類工廠等。
    3) --
    Servlet 2.4里用來簡化設(shè)置不需認證信息的資源資源如環(huán)境參數(shù)、resource-ref變量。
    InitialContext
    在網(wǎng)頁應(yīng)用程序初始化時被設(shè)置,用來支持網(wǎng)頁應(yīng)用程序組件。所有的入口和資源都放在JNDI命名空間里的java:comp/env段里。點擊下列網(wǎng)址以獲取更多信息:
    1) Java
    命名和目錄接口(Java Naming and Directory Interface
    2) J2EE
    平臺說明(J2EE Platform Specification
    設(shè)置JNDI資源
    設(shè)置JNDI資源要在$CATALINA_HOME/conf/server.xml文件里使用下列標志符:
    1) --
    設(shè)置域個可變的JNDI InitialContext入口的名字和值(同上面說的等價)。
    2) --
    設(shè)置應(yīng)用程序可用的資源的名字和類型(同上面說的等價)。
    3) --
    設(shè)置Java資源類工廠的名稱或?qū)⒂玫?/span>JavaBean屬性。
    4) --
    給全局JNDI環(huán)境(JNDI Context)添加一個鏈接。
    上述這些標志符必須放在和之間(針對專門的網(wǎng)頁應(yīng)用程序)或和之間。
    此外,設(shè)在網(wǎng)頁應(yīng)用環(huán)境描述(Web Application Descriptor)(/WEB-INF/web.xml)里的名字和值也在初始環(huán)境(Initial Context)里被設(shè)置,當(dāng)被元素值允許時將被重設(shè)初始值。
    全局變量能在子元素的里設(shè)置。
    數(shù)據(jù)庫連接池概述:
    數(shù)據(jù)庫連接是一種關(guān)鍵的有限的昂貴的資源,這一點在多用戶的網(wǎng)頁應(yīng)用程序中體現(xiàn)得尤為突出。對數(shù)據(jù)庫連接的管理能顯著影響到整個應(yīng)用程序的伸縮性和健壯性,影響到程序的性能指標。數(shù)據(jù)庫連接池正是針對這個問題提出來的。
    數(shù)據(jù)庫連接池負責(zé)分配、管理和釋放數(shù)據(jù)庫連接,它允許應(yīng)用程序重復(fù)使用一個現(xiàn)有的數(shù)據(jù)庫連接,而再不是重新建立一個;釋放空閑時間超過最大空閑時間的數(shù)據(jù)庫連接來避免因為沒有釋放數(shù)據(jù)庫連接而引起的數(shù)據(jù)庫連接遺漏。這項技術(shù)能明顯提高對數(shù)據(jù)庫操作的性能。
    數(shù)據(jù)庫連接池在初始化時將創(chuàng)建一定數(shù)量的數(shù)據(jù)庫連接放到連接池中,這些數(shù)據(jù)庫連接的數(shù)量是由最小數(shù)據(jù)庫連接數(shù)來設(shè)定的。無論這些數(shù)據(jù)庫連接是否被使用,連接池都將一直保證至少擁有這么多的連接數(shù)量。連接池的最大數(shù)據(jù)庫連接數(shù)量限定了這個連接池能占有的最大連接數(shù),當(dāng)應(yīng)用程序向連接池請求的連接數(shù)超過最大連接數(shù)量時,這些請求將被加入到等待隊列中。數(shù)據(jù)庫連接池的最小連接數(shù)和最大連接數(shù)的設(shè)置要考慮到下列幾個因素:
    1)
    最小連接數(shù)是連接池一直保持的數(shù)據(jù)庫連接,所以如果應(yīng)用程序?qū)?shù)據(jù)庫連接的使用量不大,將會有大量的數(shù)據(jù)庫連接資源被浪費;
    2)
    最大連接數(shù)是連接池能申請的最大連接數(shù),如果數(shù)據(jù)庫連接請求超過此數(shù),后面的數(shù)據(jù)庫連接請求將被加入到等待隊列中,這會影響之后的數(shù)據(jù)庫操作。
    3)
    如果最小連接數(shù)與最大連接數(shù)相差太大,那么最先的連接請求將會獲利,之后超過最小連接數(shù)量的連接請求等價于建立一個新的數(shù)據(jù)庫連接。不過,這些大于最小連接數(shù)的數(shù)據(jù)庫連接在使用完不會馬上被釋放,它將被放到連接池中等待重復(fù)使用或是空閑超時后被釋放。
    配置Tomcat數(shù)據(jù)庫連接池的前提:
    1.
    必須裝有Java運行環(huán)境;
    2. mysql

    $CATALINA_HOME/conf/server.xml里設(shè)置數(shù)據(jù)庫連接池:
    下面是配置的代碼,必須放在和之間。



     
      maxActive
     
      100
     
     
      maxIdle
     
      30
     
     
      maxWait
     
      10000
     
     
      removeAbandoned
     
      true
     
     
      removeAbandonedTimeout
     
      60
     
     
      logAbandoned
     
      false
     
     
      factory
     
      org.apache.commons.dbcp.BasicDataSourceFactory
     
     
      username
     
      root
     
     
      password
     
     
     
     
      driverClassName
     
      org.gjt.mm.mysql.Driver
     
     
      url
     
      jdbc:mysql://localhost/test
     


    下面是一些參數(shù)的說明:

    其中:
    1) path 
    指定路徑,這里設(shè)定的是$CATALINA_HOME/webapps下的test目錄;
    2) docBase
    文件根目錄。
    3) reloader 
    當(dāng)網(wǎng)頁被更新時是否重新編譯。
    4) maxActive
    連接池的最大數(shù)據(jù)庫連接數(shù)。設(shè)為0表示無限制。
    5) maxIdle 
    數(shù)據(jù)庫連接的最大空閑時間。超過此空閑時間,數(shù)據(jù)庫連接將被標記為不可用,然后被釋放。設(shè)為0表示無限制。
    6) maxWait
    最大建立連接等待時間。如果超過此時間將接到異常。設(shè)為-1表示無限制。
    7) removeAbandoned
    回收被遺棄的(一般是忘了釋放的)數(shù)據(jù)庫連接到連接池中。
    8) removeAbandonedTimeout
    數(shù)據(jù)庫連接過多長時間不用將被視為被遺棄而收回連接池中。
    9) logAbandoned
    將被遺棄的數(shù)據(jù)庫連接的回收記入日志。
    10) driverClassName JDBC
    驅(qū)動程序。
    11) url  
    數(shù)據(jù)庫連接字符串
    $CATALINA_HOME/webapps/test/WEB-INF/web.xml里設(shè)置被引用的資源:
    下面是配置代碼,必須放在和里。


    connectDB test
    jdbc/connectDB
    javax.sql.DataSource
    Container


    下面是一下參數(shù)的必要說明:
    1) description 
    對被引用的資源的描述。
    2) res-ref-name 
    資源名稱。見上面的
    3) res-type 
    資源類型。見上面的
    為了方便做解釋直接在JSP中使用資源:
    這是在$CATALINA_HOME/webapps/test下的某級子目錄里的jsp網(wǎng)頁文件部分代碼:


    代碼說明:
    DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/connectDB");
    上面這句應(yīng)用了剛才設(shè)的資源。
    資源使用完要釋放,尤其是Context資源,見try-catch-finally部分的finally代碼段,這是一種好的習(xí)慣。資源釋放時如果釋放了上級資源,下級資源將先被釋放。如:釋放了ctx,那么資源釋放順序?qū)⑹?/span>rsstmtcnnctx。換句話說,如果釋放了ctx,那么rsstmtcnn都將不可用了。
    這里的釋放資源只是將數(shù)據(jù)庫連接返回連接池中,并不是把資源真正釋放掉,見數(shù)據(jù)庫連接池概述。

     

    Datasource對象是由Tomcat提供的,因而需要使用JNDI來獲得Datasouce

    Javax.naming 中提供了Context接口,

    數(shù)據(jù)源的配置涉及到Server.xmlweb.xml,需要在server.xml中加入如下內(nèi)容:說明一下:我的數(shù)據(jù)庫是MYsql


                             type="javax.sql.DataSource"/>
              \\
    數(shù)據(jù)源的名稱
                usernameroot
    數(shù)據(jù)庫的名稱
                passwordpassword
    數(shù)據(jù)庫密碼
                driverClassName
                  org.gjt.mm.mysql.Driver\\
    要加載的驅(qū)動
                url
                  jdbc:mysql://172.20.0.73/rk?\\
    要連接的URL
             
             
      

    具體還有一些詳細的選項例如:MaxActive等,參加Server.xml中說明

    另外在Web.xml中加入如下內(nèi)容:
    test connection\\
    描述
        jdbc/testDB\\
    名稱與上對應(yīng)
        javax.sql.DataSource\\
    與上對應(yīng)
        Container\\
    與上一置
       

    配置以上內(nèi)容后,只要在你的JspJavabean 中按以下方式創(chuàng)建連接,就可以

    Context ctx=new InitialContext();
      DataSource ds=(DataSource)ctx.lookup("java:comp/env/jdbc/testDB");
      conn = ds.getConnection();

    以上代碼均測試成功,但是在Server.xml中配置數(shù)據(jù)庫的URL中我不能加入useUnicode=true&characterEncoding=GBK,所以從數(shù)據(jù)庫中取出來的漢字都是????

    我用如下代碼來解決這個問題:

    public static String toChinese(String strvalue) {
      try{
       if(strvalue==null)
      {
      return null;
      }
      else {
       strvalue = new String(strvalue.getBytes("ISO8859_1"), "GBK");
       return strvalue;
      }
      }catch(Exception e){
       return null;
      }
     }

    Step by Step
    1。將數(shù)據(jù)庫驅(qū)動程序拷貝到tomcat\common\lib目錄下面。
    2
    。修改server.xml文件,在Context配置節(jié)點下面加上資源節(jié)點,如下:
                     maxActive="100" maxIdle="30" maxWait="10000"
                     username="root" password="" driverClassName="org.gjt.mm.mysql.Driver"
                     url="jdbc:mysql://127.0.0.1:3306/test?characterEncoding=GBK&useUnicode=TRUE"/>
           
    注意的是:如果有&字符,需要轉(zhuǎn)移成&XML文件規(guī)范)
    3
    。修改Web應(yīng)用WEB-INF\web.xml文件,加上Resource-Def,如下:
     
          DB Connection
          jdbc/TestDB
          javax.sql.DataSource
          Container
     
    4
    。重新啟動Web應(yīng)用,在Web應(yīng)用中可以通過下面的代碼來獲取數(shù)據(jù)源和數(shù)據(jù)庫連接:
    javax.naming.InitialContext context = new javax.naming.InitialContext();
    DataSource ds = (DataSource) cxt.lookup( "java:/comp/env/jdbc/TestDB" );
    connection = (Connection)ds.getConnection();

    Problem And Answer
    1
    Question:如果出現(xiàn)下列提示:
          javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:  java.naming.factory.initial
            at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:640)
    ,怎么辦?
          Answer
    :檢查在Tomcatconf/server.xml文件,檢查是否設(shè)置useNaming="false",如果是,去掉。
    2
    Question:如果無法找到數(shù)據(jù)庫驅(qū)動程序怎么辦?
          Answer
    :檢查數(shù)據(jù)庫驅(qū)動JDBC程序是否放在了Tomcat\common\lib目錄下面

     

    posted on 2007-12-06 10:16 阿偉 閱讀(358) 評論(0)  編輯  收藏 所屬分類: J2EE
    主站蜘蛛池模板: 亚洲人成无码网站久久99热国产| 1000部禁片黄的免费看| 日本a级片免费看| 国产AV旡码专区亚洲AV苍井空| 最近中文字幕完整免费视频ww| 亚洲Av无码精品色午夜| 黄色网站软件app在线观看免费| 中文字幕不卡亚洲 | 午夜无码A级毛片免费视频| 色久悠悠婷婷综合在线亚洲| 国产精品免费在线播放| 中文字幕亚洲无线码| 你是我的城池营垒免费看 | 亚洲成a人片在线观看日本麻豆 | 日韩午夜免费视频| 在线观看亚洲免费| 国产成人高清亚洲| 成全视频高清免费观看电视剧| 国产亚洲一区二区三区在线观看| 久久久久久久岛国免费播放 | 日本高清在线免费| 亚洲色偷偷色噜噜狠狠99网| 国产真人无遮挡作爱免费视频| 成人午夜免费视频| 久久亚洲国产视频| 91在线品视觉盛宴免费| 男男黄GAY片免费网站WWW| 久99精品视频在线观看婷亚洲片国产一区一级在线 | 免费不卡视频一卡二卡| 亚洲精品国产综合久久久久紧| 免费人成视网站在线观看不卡| 巨胸喷奶水视频www免费视频| 亚洲视频一区在线观看| 免费毛片网站在线观看| 国产免费一区二区三区免费视频 | 亚洲熟妇av午夜无码不卡| 国产伦精品一区二区三区免费下载| 国产成人无码免费网站| 亚洲国产高清美女在线观看| 免费a级毛片在线观看| 日本一道本不卡免费 |