Tomcat6 Datasource配置 自己动手后的一些经验备忘(G)

运行环境:JDK 1.6.0_18
容器:Tomcat 6.0.20 免安装版

数据库:SQLServer2005


配置DataSource

方案一:配置全局Datasource
(1)修改tomcat/conf/context.xml
<Context>
 <!--  其他地方不用动,增加以下代码 -->
 <Resource name="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-app version="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>JNDI Global Datasource </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>
 <!--  其他地方不用动,增加以下代码 -->
 <Resource name="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>
 <!--  其他地方不用动,增加以下代码 -->
 <ResourceLink global="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>
 <!--  其他地方不用动,增加以下代码 -->
 <Resource name="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内容
<?xml version='1.0' encoding='utf-8'?>
<Context docBase="/myutil" reloadable="true" crossContext="true">
 <Resource name="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>
 <Resource name="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
<?xml version='1.0' encoding='utf-8'?>
<Context path="/myutil" <!--对应xml文件名,及工程访问名称-->
 docBase="D:\eclipse workspace\MyUtil\myutil" <!--本工程实际存放的地址-->
 reloadable="true" crossContext="true">
 <Resource name="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>

posted @ 2014-04-26 13:26  losesea  阅读(558)  评论(0编辑  收藏  举报