以前用的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,寫在裡面。
注明:以上内容結合自己的實踐過程中參考了網上很多資料,在此表示感謝。