1.前文
很多年時間沒使用過Tomcat了,除了還記得它的存在外,其餘的幾乎忘記完了!最近因工作變更不得不重拾這方面的技術。爲了在其上配置數據源,在網上搜了很多資料。也都一一嘗試過,其中有嘗試成功的,也有嘗試失敗的。爲方便以後的工作,特作此記錄筆記!
通過在網上查到的資料,在Tomcat中配置數據源主要有兩種思路:
1.全局數據源:這類數據源一旦配置後,可以被部署在該Tomcat下的所有web應用所使用。
2.局部數據源:這類數據源在配置後,只能被指定的web應用使用。
本筆記主要描述局部數據源的配置方式。
2.版本說明
apache-tomcat-6.0.41
3.配置方式
在Tomcat中配置數據源主要有兩種途徑:
1.將數據源配置在Tomcat的%Tomcathome%/conf/server.xml文件中
2.將數據源配置在web應用的WebRoot/META-INF/context.xml文件中(如果應用中沒有此文件,可手動創建)
兩種配置方式主要區別在於,使用第一種配置方式的話,一旦應用部署在其他web容器中,就需要重新配置,而第二種配置方式,可已隨時移植到其他Tomcat容器中,如果是其他廠商的容器(例如weblogic或者WAS容器),則需要更改配置。
3.1在server.xml文件中配置
3.1.1更改server.xml文件
該文件在%Tomcathome%/conf/目錄中。
在<host>節點內加上如下內容:
<Context path="/webtest" debug="5" reloadable="true" crossContext="true">
<Resource
auth="Container"
<pre name="code" class="html"> description="mysql_datasource"
name="jdbc/mysqltest"
password="zhendao"
username="zhendao"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://192.168.2.120:3306/testdb"
/>
</Context>
需要注意的是:
1.配置內容一定要放在<host>節點內。筆者在網上查找資料時,看見有文章說的是配置在<host>節點外,但是筆者沒有嘗試成功,直到將配置內容放在<host>內(若有哪位朋友在host節點外配置成功的,請分享下!)
2.其中的path="/webtest"是web應用在%tomcathome%/webapps下的應用名。
3.driver和url視不同的數據庫而不同,這個應該是地球人都知道的事了。
3.1.2更改web.xml文件
筆者改的是應用中的web.xml文件(網上有資料說可以更改與server.xml文件同目錄下的web.xml文件,不過因工作時間關係,筆者沒有嘗試過,等有空嘗試以後再補上)
在web.xml文件中增加如下內容:
<resource-ref>
<description>mysql_datasource</description>
<res-ref-name>jdbc/mysqltest</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
3.1.3引入數據庫依賴的jar包
筆者使用的是mysql數據庫,並且是將jar放在web應用的lib目錄中。
3.2配置context.xml文件
3.2.1更改context.xml文件
在web應用的WebRoot/META-INF目錄下的context.xml文件中添加如下內容(若沒有該文件,可手動創建):
<Context>
<Resource
auth="Container"
description="mysql_datasource"
name="jdbc/mysqltest"
password="zhendao"
username="zhendao"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://192.168.2.120:3306/zhendaodev"
/>
</Context>
當所有配置完成後,在第一次啓動Tocam時,Tomcat會自動加載context.xml文件,並在%Tomcathome%/conf/Catalina/localhost目錄下生成以後與web應用同名的xml文件,打開該文件會發現,其內容與配置的context.xml中的內容一樣。
3.2.2更改web.xml文件
更改web應用中的web.xml文件,加入如下內容:
<resource-ref>
<description>mysql_datasource</description>
<res-ref-name>jdbc/mysqltest</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
3.2.3引入數據庫依賴的jar包
筆者使用的是mysql數據庫,並且是將jar放在web應用的lib目錄中。
到此在Tomcat中配置數據源的兩種方式就結束了。上述兩種在Tomcat中配置數據源的方式,都是在筆者反覆測試成功後做的筆記,若有朋友按照筆者上述的方式配置數據源不成功,請先檢查Tomcat版本(筆者查的資料中有說因爲Tomcat版本的不同,配置方式也有所不同)、配置中細節是否正確、是否引入了數據庫依賴的jar包。
最後補充一點:上述兩種配置方式若同時使用,Tomcat會默認使用第一種配置的數據源,因爲此時在%Tomcathome%/conf/Catalina/localhost目錄下沒有生成與web應用同名的xml文件。
4.Tomcat多數據源配置
多數據源配置是指爲同一個web應用配置兩個或兩個以上的數據源。
配置方式與單數據源配置方式一樣,不同的是配置了多個<Resource>節點和<resource-ref>節點,例如:
server.xml文件中(context.xml文件中也是一樣的處理方式):
<Context path="/webtest" debug="5" reloadable="true" crossContext="true">
<Resource
auth="Container"
description="mysql_datasource_120"
name="jdbc/mysqltest"
password="zhendao"
username="zhendao"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://192.168.2.120:3306/dbtest"
/>
<Resource
auth="Container"
description="mysql_datasource_localhost"
name="jdbc/mysqlhost"
password="zhendao"
username="zhendao"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/dbtest"
/>
</Context>
web.xml文件中:
<resource-ref>
<description>mysql_datasource_120</description>
<res-ref-name>jdbc/mysqltest</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<resource-ref>
<description>mysql_datasource_localhost</description>
<res-ref-name>jdbc/mysqlhost</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>