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

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

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

    Tomcat5下配置MySQL數據庫連接池

    Posted on 2006-08-03 09:55 小李飛刀 閱讀(2644) 評論(2)  編輯  收藏 所屬分類: 開發經驗
    轉錄筆記:不過遺憾的是,如下幾種方法都沒有在我的機器上配置成功(Tomcat5.5.17 + WinXPSP2)。正確配置見我自己的評論,Tomcat 的日志中沒發現什么錯誤,看上去都很正常,但是測試程序卻老是提示同樣的錯誤:

    Error occurred:org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'

    但Driver名和URL都設置對了,在Admin的DataSource中也看得到。

    Tomcat版本之間變化太大了,請大家幫忙看看,到底哪里有問題,謝謝!


    1.在$CATALINA_HOME/conf/server.xml中添加配置信息,聲明連接池的具體信息,添加內容如下:
      
      <!--聲明連接池-->
      
      <Resource name="jdbc/mysql" auth="Container" type="javax.sql.DataSource"/>
      
      <!-- 對連接池的參數進行設置 -->
      
      <ResourceParams name="jdbc/mysql">
      
      <parameter>
      
      <name>factory</name>
      
      <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
      
      </parameter>
      
      <parameter>
      
      <name>maxWait</name>
      
      <value>5000</value>
      
      </parameter>
      
      <parameter>
      
      <name>maxActive</name>
      
      <value>20</value>
      
      </parameter>
      
      <parameter>
      
      <name>username</name>
      
      <value>shopadm</value>
      
      </parameter>
      
      <parameter>
      
      <name>password</name>
      
      <value>123</value>
      
      </parameter>
      
      <parameter>
      
      <name>url</name>
      
      <value>jdbc:mysql://localhost/shopdb?useUnicode=true&charact-erEncoding=gb2312</value>
      
      </parameter>
      
      <parameter>
      
      <name>driverClassName</name>
      
      <value>com.mysql.jdbc.Driver</value>
      
      </parameter>
      
      <parameter>
      
      <name>maxIdle</name>
      
      <value>10</value>
      
      </parameter>
      
      </ResourceParams>
      
      2. 在$CATALINA_HOME/conf/web.xml的</web-app>前添加如下信息:
      
      <resource-ref>
      
      <description>DB Connection</description>
      
      <res-ref-name>jdbc/mysql</res-ref-name>
      
      <res-type>javax.sql.DataSource</res-type>
      
      <res-auth>Container</res-auth>
      
      </resource-ref>
      
      其中<res-ref-name>中的參數名必須和server.xml中聲明的連接名一樣。
      
      3. 在$CATALINA_HOME/conf/catalina/localhost目錄下找到需要進行數據庫連接的當前程序的配置信息,比如這里是shopping.xml,在這個文件中添加如下信息:
      
      <Context …>
      
      …
      
      <ResourceLink name=”jdbc/mysql” global=”jdbc/mysql” type=”javax.sql.DataSource”/>
      
      …
      
      </Context>
      
      大功告成!
      
      在此基礎上,參考Tomcat官方網站的用戶手冊,摸索出另外一種配置連接池的方法,這個方法不需要對server.xml進行修改,只要對需要使用到連接池的程序的配置文檔進行修改就可以了。方法如下:
      
       1.$CATALINA_HOME/conf/catalina/localhost目錄下找到需要數據庫連接池的程序的配置文檔,此處是 shopping.xml。在<Context> </Context>之間添加如下信息,聲明一個數據庫連接池:
      
      <Resource name="jdbc/mysql" auth="Container" type="javax.sql.DataSource"/>
      
      <ResourceParams name="jdbc/mysql">
      
      <parameter>
      
      <name>factory</name>
      
      <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
      
      </parameter>
      
      <parameter>
      
      <name>maxWait</name>
      
      <value>5000</value>
      
      </parameter>
      
      <parameter>
      
      <name>maxActive</name>
      
      <value>20</value>
      
      </parameter>
      
      <parameter>
      
      <name>password</name>
      
      <value>123</value>
      
      </parameter>
      
      <parameter>
      
      <name>url</name>
      
      <value>jdbc:mysql://localhost/shopdb?useUnicode=true&characterEncoding=gb2312</value>
      
      </parameter>
      
      <parameter>
      
      <name>driverClassName</name>
      
      <value>com.mysql.jdbc.Driver</value>
      
      </parameter>
      
      <parameter>
      
      <name>maxIdle</name>
      
      <value>10</value>
      
      </parameter>
      
      <parameter>
      
      <name>username</name>
      
      <value>shopadm</value>
      
      </parameter>
      
      </ResourceParams>
      
      這里的參數和上一種方法中添加到server.xml里的信息幾乎是完全一樣的。
      
      2.在對應程序的WEB-INF下建立一個web.xml文檔,添加如下信息:
      
      <?xml version="1.0" encoding="ISO-8859-1"?>
      
      <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
      
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      
      xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
      
      http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
      
      version="2.4">
      
      <resource-ref>
      
      <description>DB Connection</description>
      
      <res-ref-name>jdbc/mysql</res-ref-name>
      
      <res-type>javax.sql.DataSource</res-type>
      
      <res-auth>Container</res-auth>
      
      </resource-ref>
      
      </web-app>

    另外一種方法,與Admin 頁面配置結果比較接近,同樣是放在GlobalNamingResources中

    1.將數據庫驅動程序的JAR文件放在Tomcat的?common/lib?中;

    2.在server.xml中設置數據源,以MySQL數據庫為例,如下:
    在<GlobalNamingResources>?</GlobalNamingResources>節點中加入,
    ??????<Resource
    ??????name="jdbc/DBPool"
    ??????type="javax.sql.DataSource"
    ??????password="root"
    ??????driverClassName="com.mysql.jdbc.Driver"
    ??????maxIdle="2"
    ??????maxWait="5000"
    ??????username="root"
    ??????url="jdbc:mysql://127.0.0.1:3306/test"
    ??????maxActive="4"/>
    ???屬性說明:name,數據源名稱,通常取”jdbc/XXX”的格式;
    ????????????type,”javax.sql.DataSource”;
    ????????????password,數據庫用戶密碼;
    ????????????driveClassName,數據庫驅動;
    ????????????maxIdle,最大空閑數,數據庫連接的最大空閑時間。超過空閑時間,數據庫連
    ?????????????????????接將被標記為不可用,然后被釋放。設為0表示無限制。
    ????????????MaxActive,連接池的最大數據庫連接數。設為0表示無限制。
    ????????????maxWait?,最大建立連接等待時間。如果超過此時間將接到異常。設為-1表示
    ?????????????????????無限制。

    3.在你的web應用程序的web.xml中設置數據源參考,如下:
    ??在<web-app></web-app>節點中加入,
    ??<resource-ref>
    ????<description>MySQL?DB?Connection?Pool</description>
    ????<res-ref-name>jdbc/DBPool</res-ref-name>
    ????<res-type>javax.sql.DataSource</res-type>
    ????<res-auth>Container</res-auth>
    ????<res-sharing-scope>Shareable</res-sharing-scope>
    ?</resource-ref>
    ??子節點說明:?description,描述信息;
    ???????????????res-ref-name,參考數據源名字,同上一步的屬性name;
    ???????????????res-type,資源類型,”javax.sql.DataSource”;
    ???????????????res-auth,”Container”;
    ???????????????res-sharing-scope,”Shareable”;

    4.在web應用程序的context.xml中設置數據源鏈接,如下:
    ??在<Context></Context>節點中加入,
    ??<ResourceLink
    ???name="jdbc/DBPool"?
    ???type="javax.sql.DataSource"?
    ???global="jdbc/DBPool"/>
    ???屬性說明:name,同第2步和第3步的屬性name值,和子節點res-ref-name值;
    ?????????????type,同樣取”javax.sql.DataSource”;
    ?????????????global,同name值。
    ?
    至此,設置完成,下面是如何使用數據庫連接池。
    1.建立一個連接池類,DBPool.java,用來創建連接池,代碼如下:
    import?javax.naming.Context;
    import?javax.naming.InitialContext;
    import?javax.naming.NamingException;
    import?javax.sql.DataSource;

    public?class?DBPool?{
    ????private?static?DataSource?pool;
    ????static?{
    ?????????Context?env?=?null;
    ??????????try?{
    ??????????????env?=?(Context)?new?InitialContext().lookup("java:comp/env");
    ??????????????pool?=?(DataSource)env.lookup("jdbc/DBPool");
    ??????????????if(pool==null)?
    ??????????????????System.err.println("'DBPool'?is?an?unknown?DataSource");
    ???????????????}?catch(NamingException?ne)?{
    ??????????????????ne.printStackTrace();
    ??????????}
    ??????}
    ????public?static?DataSource?getPool()?{
    ????????return?pool;
    ????}
    }

    2. 在要用到數據庫操作的類或jsp頁面中,用DBPool.getPool().getConnection(),獲得一個Connection對象,就可 以進行數據庫操作,最后別忘了對Connection對象調用close()方法,注意:這里不會關閉這個Connection,而是將這個 Connection放回數據庫連接池。

    Feedback

    # re: Tomcat5下配置MySQL數據庫連接池  回復  更多評論   

    2006-08-03 13:37 by 小李飛刀
    在網上再三查找,并經過反復試驗后,總算是把它配置好了,發現如下幾個問題:
    1。 Tomcat 5.5.17 的Admin功能很不完善,在JNDI的配置上存在BUG,無法把非全局的DataSource 或ResourceLinks寫入%TOMCAT_HOME%/conf/Catalina/localhost/<webname>.xml中;只能手工進行;

    2. CLASSPATH配置可能也有問題,Driver包必須放在%TOMCAT_HOME%\common\lib下才能被找到,%TOMCAT_HOME%/shared/lib下不行,甚至在<webname>/WEB-INF/lib下也不能被找到,應該是這個版本的問題,記得以前至少在應用下是能找到的;

    總結一下,主要是三個地方要配置:

    a. %TOMCAT_HOME%/conf/ 下配置DataSource: 配置server.xml 或 localhost/<webname>.xml
    其中server.xml下配置DataSource則可供所有WEB應用使用,
    需要在<GlobalNamingResources> 下加上<Resource>項,這個通過Admin頁面也可以完成;然后給需要用到的應用中加上<ResourceLink>即可,但只能手工進行
    <ResourceLink name="jdbc/<jndiname>" global="jdbc/<jndiname>" type="javax.sql.DataSource"/>, 放在<Context>下;

    如果只想給某個程序用,不想配置Server.xml的話,可以只在localhost/<webname>.xml中加上<Resource>,把<Resource>加到<Context>下
     
    <Resource
    auth="Container"
    description="DB Connection"
    name="jdbc/<jndiname>"
    type="javax.sql.DataSource"
    driverClassName="com.mysql.jdbc.Driver"
    password="<pass>"
    maxIdle="2"
    maxWait="5000"
    username="<user>"
    url="jdbc:mysql://localhost/<dbname>"
    maxActive="4"/>


    b. 在應用的web.xml中配置<resource-ref>
    <resource-ref>
    <description>EMCenter Database for WEB Applications</description>
    <res-ref-name>jdbc/<jndiname></res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    </resource-ref>

    c. 把driver包拷貝到%TOMCAT_HOME%/common/lib/下,應該是最簡配置了,有興趣的可以繼續試驗,留意看logs/目錄下的日志記錄能加快進程。其實Admin要是能改進一下最好了,這樣太麻煩

    另: 有些不解的是,我用的sqltags包(jstl.jar,standard.jar)放在WEB-INF/lib下卻能被找到,測試代碼如下:

    <%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">


    <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

    <sql:query var="rs" dataSource="jdbc/<jndiname>">
    select * from <tablename>
    </sql:query>

    <html>
    <head>
    <title>DB Test</title>
    </head>
    <body>

    <h2>Results</h2>

    <c:forEach var="row" items="${rs.rows}">
    ID ${row.id}<br/>
    name ${row.name}<br/>
    </c:forEach>

    </body>
    </html>

    # re: Tomcat5下配置MySQL數據庫連接池[未登錄]  回復  更多評論   

    2009-01-20 10:32 by HH
    NND,我怎么弄都不行!

    posts - 44, comments - 43, trackbacks - 0, articles - 5

    Copyright © 小李飛刀

    涉足江湖,廣交朋友
    尋找有共同興趣愛好者一起開創掌上移動應用!


    歡迎光臨!您是第 hit counter 位訪客。
    主站蜘蛛池模板: 国产jizzjizz免费看jizz| 毛片免费全部播放无码| 国产成人3p视频免费观看| 77777午夜亚洲| 在线免费不卡视频| 亚洲精品精华液一区二区 | 日本xxwwxxww在线视频免费 | 亚洲明星合成图综合区在线| 久久大香香蕉国产免费网站| 久久精品国产96精品亚洲| 99精品视频在线观看免费专区| 亚洲色欲色欲综合网站| xxxx日本免费| 亚洲色无码专区一区| 国产无遮挡又黄又爽免费视频| 黄页视频在线观看免费| 自拍偷自拍亚洲精品情侣| 水蜜桃视频在线观看免费播放高清| 久久精品国产亚洲综合色| 亚洲免费在线播放| 亚洲sss综合天堂久久久| 免费精品国产自产拍观看| 亚欧乱色国产精品免费视频| 国产V亚洲V天堂A无码| 青娱分类视频精品免费2| 久久久久久亚洲av无码蜜芽| 亚洲 无码 在线 专区| 久久免费观看国产99精品| 亚洲av成人一区二区三区| 亚洲国产综合久久天堂| 久久午夜免费鲁丝片| 亚洲av日韩综合一区久热| 亚洲一区二区三区偷拍女厕| xx视频在线永久免费观看| 免费大片av手机看片高清| 亚洲一区中文字幕久久| 啦啦啦www免费视频| 免费国产污网站在线观看| 亚洲色成人WWW永久在线观看| 亚洲国产午夜福利在线播放 | 欧洲亚洲国产精华液|