天天看點

Tomcat 5.5.20 資料庫連接配接池配置

    以前用的Tomcat版本都是Tomcat 5.0.28,現在想用新的版本,把應用部署到Tomcat 5.5.20時,發現連接配接池建立不成功。這裡先介紹Tomcat 5.5.20下的配置方法,我用來釋出的Web應用有兩個,分别是tms和cms。資料庫分别以SQLServer 2000和Mysql5.0.26為例。(我喜歡用最新版本)

    釋出的web應用名為tms,資料庫為SQLServer 2000,JDBC驅動為SQL Server 2000 Driver for JDBC SP3。(不是SP3也是可以的)。

1. 拷貝SQLServer2K JDBC驅動程式到:%TOMCAT_HOME%/common/lib目錄下,分别為:msbase.jar,mssqlserver.jar,msutil.jar

    如果資料庫是mysql,則同樣拷貝JDBC驅動到該目錄下,我用的是:mysql-connector-java-5.0.3-bin.jar。

2. 釋出web應用tms。修改%TOMCAT_HOME%/conf/server.xml,在<Host>與</Host>之間加入以下代碼,

<Context path="/tms" docBase="D:/devhome/tmsproj/tms" debug="0" reloadable="true">

    <Resource name="jdbc/TMSDB"

          auth="Container"

          type="javax.sql.DataSource"

          driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"

          maxIdle="20"

          maxWait="5000"

          username="sa"

          password="sa"

          maxActive="4"

          url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=tmsdb">

    </Resource>

</Context>

#################### 若是mysql,則檔案如下(web應用為cms)####################

<Context path="/cms" docBase="D:/devhome/cmsproj/cms" debug="0" reloadable="true">

    <Resource name="jdbc/cmsdb"

              auth="Container"

              type="javax.sql.DataSource"

              driverClassName="com.mysql.jdbc.Driver"

              maxIdle="20"

              maxWait="5000"

              maxActive="10"

              username="root"

              password="root"

              url="jdbc:mysql://localhost/cms?characterEncoding=GB2312">

    </Resource>

</Context>

##############################################################################

3. 編輯WEB應用的web.xml檔案,在<web-app>與</web-app>之間加入如下代碼:

  <resource-ref>

       <description>DB Connection</description>

    <res-ref-name>jdbc/TMSDB</res-ref-name>

    <res-type>javax.sql.DataSource</res-type>

    <res-auth>Container</res-auth>

  </resource-ref>

  注意:其實這一步是可選的,也就是說,不需要設定web.xml中的resource-ref,在server.xml或者對應每個web應用程式各個單獨包含<Context>元素的xml檔案設定<Resource>就可以了。兩者是等價的。

4.有些童子說,要在%TOMCAT_HOME%/conf/Catalina/localhost目錄下增加一個以web應用名字命名的xml檔案,比如本例中tms.xml,如下所示,其實是不需要的。(在Tomcat5.0.28中,在server.xml中配置後會自動生成這個檔案,在 Tomcat5.5.20中沒有)

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

<Context docBase="D:/devhome/tmsproj/tms" path="/tms" reloadable="true">

    <Resource name="jdbc/TMSDB"

              auth="Container"

              type="javax.sql.DataSource"

              driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"

              maxIdle="2"

              maxWait="5000"

              username="sa"

              password="sa"

              maxActive="4"

              url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=tmsdb">

    </Resource>

</Context>

5.這裡配置就完成了,在程式中可以測試一下。

    String dsname = "java:comp/env/jdbc/cmsdb";

    Context ctx = new InitialContext();

    DataSource ds = (DataSource)ctx.lookup(serviceName);

    Connection conn = ds.getConnection();

    // 利用連接配接執行DB操作......

6.最後再比較一下在資料源配置上Tomcat5.5與Tomcat5.0的差别。

下面是上面第2步所述Web應用tms在Tomcat5.0.28中的配置<Context>部分。

<Context path="/tms" docBase="D:/devhome/tmsproj/tms" debug="0" reloadable="true">

    <Resource name="jdbc/TMSDB"

               auth="Container"

               type="javax.sql.DataSource" />

    <ResourceParams name="jdbc/TMSDB">

        <parameter>

            <name>factory</name>

            <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>

        </parameter>

        <parameter>

            <name>maxActive</name>

            <value>100</value>

        </parameter>

        <parameter>

            <name>maxIdle</name>

            <value>30</value>

        </parameter>

        <parameter>

          <name>maxWait</name>

          <value>10000</value>

        </parameter>

        <parameter>

           <name>username</name>

           <value>sa</value>

        </parameter>

        <parameter>

            <name>password</name>

            <value>sa</value>

        </parameter>

        <parameter>

           <name>driverClassName</name>

           <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>

        </parameter>

        <parameter>

            <name>url</name>

            <value>jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=tmsdb</value>

        </parameter>

    </ResourceParams>

</Context>

  上面針對tomcat5.0的jdbc資料源的ResourceParams其實不需要設定factory,直接使用預設的dbcp資料源。注意上面Resource元素和ResourceParams設定是獨立的,不要以為ResourceParams是Resource的嵌套元素。

  出現這些差别,究其原因是在Tomcat5.5中,有一些變化,取消掉了ResourceParams元素,所有的參數跟随着Resource,成為Resource元素的屬性了。

6.另外,除了傳統的在server.xml和單獨每個web應用程式對應的context的xml檔案中設定Resource元素,還多了一種方式。

那就是在web應用程式目錄下建立一個META-INF目錄,建立一個context.xml,寫在裡面。

 注明:以上内容結合自己的實踐過程中參考了網上很多資料,在此表示感謝。

繼續閱讀