Tomcat6 Datasource配置 自己动手后的一些经验备忘
运行环境:JDK 1.6.0_18容器:Tomcat 6.0.20 免安装版
数据库:SQLServer2005
配置DataSource
方案一:配置全局Datasource
(1)修改tomcat/conf/context.xml
<Context>
<!--其他地方不用动,增加以下代码-->
<Resourcename="jdbc/globalConnectionPool"auth="Container"type="javax.sql.DataSource"
driverClassname="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://localhost:1433;DatabaseName=bshk"
username="bshk"
password="bshk"
maxActive="20"
maxIdle="10"
maxWait="10000"/>
<!--增加结束-->
</Context>(2)修改工程的web.xml
<web-appversion="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!--其他地方不用动,增加以下代码-->
<resource-ref>
<description>JNDIGlobalDatasource</description>
<res-ref-name>jdbc/globalConnectionPool</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<!--增加结束-->
</web-app>(3)因为这个配置是全局性的,所以需要报jdbc Driver放置到tomcat/lib下,例如:我用的是SQLServer2005数据库,我就需要把sqljdbc.jar放置到tomcat/lib
方案二:配置全局Datasource
(1)修改tomcat/conf/server.xml
在<GlobalNamingResources>节点下增加,GlobalNamingResources下有其他Resource节点也不用管
<GlobalNamingResources>
<!--其他地方不用动,增加以下代码-->
<Resourcename="jdbc/globalConnectionPool2"auth="Container"type="javax.sql.DataSource"
driverClassname="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://localhost:1433;DatabaseName=bshk"
username="bshk"
password="bshk"
maxActive="20"
maxIdle="10"
maxWait="10000"/>
<!--增加结束-->
<!--也许有其他Resource节点-->
</GlobalNamingResources>
(2)修改tomcat/conf/context.xml
<Context>
<!--其他地方不用动,增加以下代码-->
<ResourceLinkglobal="jdbc/globalConnectionPool2"name="jdbc/globalConnectionPool2"type="javax.sql.DataSource"/>
<!--增加结束-->
</Context>(3)重复 方案一 的(2)、(3)
方案三:配置全局Datasource [Tomcat 6.0没有成功,但别人说tomcat5.5行,自己没有验证]
(1)修改tomcat/conf/server.xml
在<GlobalNamingResources>节点下增加,GlobalNamingResources下有其他Resource节点也不用管
<GlobalNamingResources>
<!--其他地方不用动,增加以下代码-->
<Resourcename="jdbc/globalConnectionPool2"auth="Container"type="javax.sql.DataSource"
driverClassname="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://localhost:1433;DatabaseName=bshk"
username="bshk"
password="bshk"
maxActive="20"
maxIdle="10"
maxWait="10000"/>
<!--增加结束-->
<!--也许有其他Resource节点-->
</GlobalNamingResources>
(2)在tomcat\webapps\myapp\META-INF\context.xml的Context中增加:[我自己的META-INF目录下,根本没有context.xml,也不知道自己Copy的xml是否正确]
<ResourceLink global="jdbc/mydb" name="jdbc/mydb" type="javax.sql.DataSource"/>推荐方案四:配置局部Datasource
假设我的工程名叫myutil
(1)工程必须配置到tomcat/webapps下,即tomcat/webapps/myutil
(2)工程增加:META-INF/context.xml,即tomcat/webapps/myutil/META-INF/context.xml【没有就建一个目录及xml文件】
XML内容
<?xmlversion='1.0'encoding='utf-8'?>
<ContextdocBase="/myutil"reloadable="true"crossContext="true">
<Resourcename="jdbc/globalConnectionPool4"
type="javax.sql.DataSource"
driverClassname="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://localhost:1433;DatabaseName=bshk"
username="bshk"
password="bshk"
maxActive="20"
maxIdle="10"
maxWait="10000"/>
</Context>XML内容也可以是: [我想说的是docBase属性可有可无,里面的内容也可以随意,如docBase="/Ilovejava"]
<?xml version='1.0' encoding='utf-8'?>
<Context>
<Resourcename="jdbc/globalConnectionPool4"
type="javax.sql.DataSource"
driverClassname="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://localhost:1433;DatabaseName=bshk"
username="bshk"
password="bshk"
maxActive="20"
maxIdle="10"
maxWait="10000"/>
</Context>(3)将JDBC Driver放入工程的lib中
(4)无需在web.xml做任何配置
A:
如果你报:javax.naming.NameNotFoundException: Name jdbc is not bound in this Context
那么,以下这个经验可能对你有帮助:
如果
(1)工程放在webapps下
(2)工程创建了META-INF目录,配置了context.xml
(3)假设工程名是:myutil
那么,在启动Tomcat的时候,会在\tomcat\conf\Catalina\localhost目录下生成一个文件,名为:myutil.xml
里面的内容,应该是跟:META-INF/context.xml一样的。
有时候,你手工删除了\tomcat\conf\Catalina\localhost\myutil.xml,
当你重新启动时,tomcat不一定帮你重新生成,
运行程序就会报javax.naming.NameNotFoundException: Name jdbc is not bound in this Context
或者
你发现META-INF/context.xml错了,你更正了,重启tomcat,
context.xml的内容未必会同步到conf\Catalina\localhost\myutil.xml,所以程序仍然报错!
大家要小心确。
B:如果希望使用非tomcat自带的连接池,
1.<Resource />增加属性:factory,即<Resource name="jdbc/globalConnectionPool4"
type="javax.sql.DataSource" driverClassname="com.microsoft.sqlserver.jdbc.SQLServerDriver"
factory="org.apache.commons.dbcp.BasicDataSourceFactory"
其他同上
/>
参考文章:http://tech.ddvip.com/2009-04/1239789141115193.html
C:
driver的lib包 及 连接池的lib包,如果放在了工程的WEB-INF/lib下,就没必要放到tomcat的lib目录下了。
当然,只放在tomcat的lib下,工程的lib没有,也OK
推荐
方案五:配置局部Datasource
(1)工程不需要配置到tomcat/webapps下;
(2)假如我希望到时候别人访问我的程序是:http://IP地址:端口/myutil,
那么,在tomcat/conf/下增加两层:Catalina\localhost目录,在Catalina\localhost下增加myutil.xml
(3)配置myutil.xml
<?xmlversion='1.0'encoding='utf-8'?>
<Contextpath="/myutil"<!--对应xml文件名,及工程访问名称-->
docBase="D:\eclipseworkspace\MyUtil\myutil"<!--本工程实际存放的地址-->
reloadable="true"crossContext="true">
<Resourcename="jdbc/globalConnectionPool4"
type="javax.sql.DataSource"
driverClassname="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://localhost:1433;DatabaseName=bshk"
username="bshk"
password="bshk"
maxActive="20"
maxIdle="10"
maxWait="10000"/>
</Context>