Tomcat 5.5.20 数据库连接池配置

来源:互联网 发布:飞客数据恢复中心 编辑:程序博客网 时间:2024/05/29 14:56
    以前用的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,写在里面。
 注明:以上内容结合自己的实践过程中参考了网上很多资料,在此表示感谢。
原创粉丝点击