天天看点

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,写在里面。

 注明:以上内容结合自己的实践过程中参考了网上很多资料,在此表示感谢。