綠色資源網(wǎng):您身邊最放心的安全(quán)下(xià)載站(zhàn)! 最(zuì)新軟件|熱門排行|軟件(jiàn)分類|軟件專題|廠商大全

綠(lǜ)色資源網(wǎng)

技術(shù)教程(chéng)
您的(de)位置:首頁服務器類Web服務器 → Tomcat數(shù)據庫連接池的配置方法總結

Tomcat數(shù)據庫連接池的配(pèi)置方法總結

我要(yào)評(píng)論 2013/04/04 20:42:15 來源:綠色資源網 編(biān)輯:www.chithemodel.com [ ] 評論:0 點(diǎn)擊:214次

數據庫連接是一種關鍵的有限的昂貴的資源,這在(zài)多用戶網頁應用程(chéng)序中體現的尤為突出.對(duì)數據庫連接的管理能顯著影響到整個應用(yòng)程序的(de)伸縮(suō)性和健壯性,影響到程(chéng)序的(de)性能指標,數(shù)據庫連接池正是(shì)針對這(zhè)個(gè)問題提出的.

數(shù)據庫(kù)連接池負責分(fèn)配,管理和釋放數據庫連接,它允許應用程(chéng)序重複使用(yòng)一個現有的(de)數(shù)據(jù)庫連接,而不是(shì)再(zài)重新建立一(yī)個;釋放空閑時間超過最(zuì)大空閑時間(jiān)的數據(jù)庫連接來避免因為(wéi)沒有釋(shì)放數據庫(kù)連接而(ér)引(yǐn)起的數(shù)據(jù)庫連接遺(yí)漏,這樣(yàng)可(kě)以明顯提高對數據(jù)庫操作的性能.

數(shù)據庫連接(jiē)池在初始(shǐ)化的時將創建一定數量的數據庫連接放到連接池中,這(zhè)些數據(jù)庫(kù)連接的數量是又(yòu)最(zuì)小數(shù)據庫連(lián)接數來設(shè)定的,無論這些數據庫(kù)連接是否(fǒu)被使用,連接(jiē)池都將一直保證至少擁有(yǒu)這麽多的連接(jiē)數(shù),當應用程序向(xiàng)連接(jiē)池請(qǐng)求的連接數超(chāo)過最大連接數量時,這些請(qǐng)求將被加入到等待隊列中.

數據庫連接池的最小連接數和(hé)最大連接數的設置要考(kǎo)慮到下列幾個因素:

1.最小連接數是連接(jiē)池一直(zhí)保(bǎo)持(chí)的數據庫連接,所以如(rú)果應(yīng)用程序對數(shù)據庫連接的使用(yòng)量不大,將會有大量(liàng)的數(shù)據庫連接資源被浪費.

2.最大連接數是連接(jiē)池申請的(de)最(zuì)大(dà)連接數,如果數據庫連接(jiē)請求超過次數,後麵的數據庫連接請求將被加入到(dào)等待對(duì)了中,這回影響之後的(de)數據庫操作

如果最小連接數(shù)與最(zuì)大連接數相差太(tài)大,那麽最先的(de)連接(jiē)請求將會獲利,之後超過最(zuì)小連接(jiē)數量的連接請求等價於建立一個新的數據庫連接,不(bú)過,這些小於最小連接(jiē)數的(de)數據庫連(lián)接在使用(yòng)完不會馬上被釋(shì)放,它將被放到連接池中等待重複使用或(huò)是空閑超時被釋放.

實例使用的Tomcat版本為6.0

方法一: 在Tomcat的conf/context.xml中配置
在Tomcat\apache-tomcat-6.0.33\conf目錄下的context.xml文(wén)件中配置默認值(zhí)如下:

<?xml version='1.0' encoding='utf-8'?>
<Context>
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
</Context>

配置連(lián)接池:

<?xml version='1.0' encoding='utf-8'?>
 

<Context>
    <WatchedResource>WEB-INF/web.xml</WatchedResource>    <!--配置(zhì)oracle數據(jù)庫(kù)的連接(jiē)池-->
    <Resource name="jdbc/oracleds"
        author="Container"
        type="javax.sql.DataSource"
        maxActive="100"
        maxIdle="30"
        maxWait="10000"
        username="scott"
        password="tiger"
        driverClassName="oracle.jdbc.dirver.OracleDriver"
        url="jdbc:oracle:thin:@127.0.0.1:1521:ora9" />    <!--配置mysql數據庫的連接池, 
        需要做的額(é)外步驟是將mysql的Java驅動類(lèi)放到tomcat的lib目錄下(xià)        
        maxIdle 連接池中最多可空(kōng)閑maxIdle個連(lián)接 
        minIdle 連接池中最少空閑maxIdle個(gè)連(lián)接 
        initialSize 初始化連接數目 
        maxWait 連接池中連接用完時,新的請求等待時間,毫秒(miǎo) 
        username 數據庫用(yòng)戶名
        password 數據庫密碼
        -->
    <Resource name="jdbc/mysqlds" 
        auth="Container" 
        type="javax.sql.DataSource" 
        username="root" 
        password="root" 
        maxIdle="30" 
        maxWait="10000" 
        maxActive="100"
        driverClassName="com.mysql.jdbc.Driver"
        url="jdbc:mysql://127.0.0.1:3306/db_blog" /></Context>

配置好後(hòu)需要注意的(de)兩個步驟
 

1.將(jiāng)對應數(shù)據庫的驅動類放(fàng)到tomcat的lib目(mù)錄西安

2.重新啟動tomcat服務器,讓(ràng)配(pèi)置生(shēng)效

在web應用(yòng)程(chéng)序的web.xml中設置數(shù)據源參考,如(rú)下(xià):

在<web-app></web-app>節點中加入下(xià)麵內容

<resource-ref>
 

      <description>mysql數據庫(kù)連(lián)接(jiē)池</description>
      <!-- 參考數據源名字,同Tomcat中配置的Resource節(jiē)點中name屬(shǔ)性值"jdbc/mysqlds"一(yī)致(zhì) -->
      <res-ref-name>jdbc/mysqlds</res-ref-name>
      <!-- 資源類(lèi)型 -->
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
      <res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>

錯(cuò)誤解(jiě)決(jué):
 

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:645)
    at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
    at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
    at javax.naming.InitialContext.lookup(InitialContext.java:392)
    at com.iblog.util.DBPoolUtil.<clinit>(DBPoolUtil.java:34)

解(jiě)決方(fāng)案:
 

上麵的異常(cháng)信息是配置文件(jiàn)中(zhōng)JNDI沒有初始化造成的(de)

如果下麵的問(wèn)題都不存在

1.要去檢查下配置文件(jiàn)中連(lián)接(jiē)數據庫(kù)的(de)URL參數是(shì)否正確2.以及是否導入了正常的包3.檢(jiǎn)查在Tomcat中(zhōng)conf/server.xml文件,檢查是否設置useNaming="false",如果是,去掉

2.那就是通過main方法測(cè)試的,這個數據(jù)源不支持(chí)這樣的測試方法,程(chéng)序要運行在Tomcat中才能(néng)找(zhǎo)到相應(yīng)的數據源.[我在測試時(shí)犯這樣(yàng)的錯(cuò)導致上麵錯誤出現]

<%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>     
 

<%@ page import="java.sql.*" %>     
<%@ page import="javax.naming.*" %>     
<%@ page import="javax.sql.DataSource" %>
<html>     
<head>     
<title>Tomcat6.0 JNDI!</title>    
</head>    
  <body>      
   Tomcat連接池測(cè)試,獲取數(shù)據源 <br>     
    <%     
        try {      
            //初始化(huà)查找命名空間
            Context ctx = new InitialContext();  
            //參數java:/comp/env為(wéi)固(gù)定路徑   
            Context envContext = (Context)ctx.lookup("java:/comp/env"); 
            //參數jdbc/mysqlds為數據(jù)源和JNDI綁定(dìng)的名(míng)字
            DataSource ds = (DataSource)envContext.lookup("jdbc/mysqlds"); 
            Connection conn = ds.getConnection();     
            conn.close();     
            out.println("<span style='color:red;'>JNDI測試成(chéng)功<span>");     
        } catch (NamingException e) {     
            e.printStackTrace();     
        } catch (SQLException e) {     
            e.printStackTrace();     
        }     
    %>     
  </body>     
</html>   

運行效果(guǒ):
 

方法二:在Tomcat的conf/server.xml中配置(zhì)

打(dǎ)開tomcat的conf/server.xml文件(jiàn),找到<GlobalNamingResources></GlobalNamingResources>節點,默認的內容如下

<GlobalNamingResources>
 

    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>

在該節點中加入相關(guān)的池配置信息,如下
 

  <GlobalNamingResources>
 

             <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />             <!--配置mysql數據庫的連接池, 
                需要做的額外步驟是將mysql的Java驅動類放到tomcat的(de)lib目錄下        
               -->
             <Reso                    

關鍵詞:Tomcat,數據庫

閱讀本文後您有什麽感(gǎn)想(xiǎng)? 已有 人(rén)給出評價!

  • 0 歡迎喜歡(huān)
  • 0 白癡
  • 0 拜(bài)托
  • 0 哇
  • 0 加油
  • 0 鄙視