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>

相关推荐