在Tomcat配置和使用数据库资源(DataSource)

转载 2006年09月07日 00:12:00
主题:使用数据库资源

由于很多WEB程序需要通过Jdbc访问数据库,J2EE标准规定了J2EE应用程序服务器要提供
支持JDBC和连接池的数据库资源(DataSource).这样WEB程序不必自己实现JDBC连接和
连接池机制。有些能单独运行的WEB服务器(如TOMCAT)也根据J2EE标准支持DataSource方法。
这样,使用DataSource访问数据库的Web程序可以不用改动就在其他J2EE程序服务器上运行,
下面以Tomcat为例说明使用WEB程序DataSource的方法。

在Web程序中要使用DataSource访问数据库,包括以下步骤:

1.安装JDBC驱动器
需要将适当的JDBC驱动器的JAR文件安装到$CATALINA_HOME/common/lib目录下。
WEB服务器的DataSource资源管理机制会用到该JDBC驱动器。

2.设置server.xml中的程序上下文
Tomcat4和Tomcat5支持定义JNDI初始化上下文(InitialContext)。
JNDI(Java Naming and Directory InterFace)技术。它提供了统一Java命名和目录服务。

JNDI初始化上下文当Web程序第一次被部署时由Web容器来创建和管理。一个初始化上下文
可以代表一个Web程序的有关配置信息,初始化上下文可以在$CATALINA_HOME/conf/server.xml
文件中设置。可以作为程序的部署描述文件(WEB-INF/web.xml),用来参考初始化上下文中定义的元素。
DataSource是初始化上下文的一种,它可以被Web程序中的servlet等构件用来进行数据库连接。

Tomcat配置JNDI DataSource需要在$CATALINA_HOME/conf/server.xml的<Host name="localhost"...>和</Host>之间加入下面的上下文<context>定义。

程序例:
<Context path="/icwork" docBase="icwork" debug="5" reloadable="true" crossContext="true">
<Resource name="jdbc/WorkflowAppDb" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/WorkflowAppDb">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>5000</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>4</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>2</value>
</parameter>
<parameter>
<name>username</name>
<value>PUBLIC</value>
</parameter>
<parameter>
<name>password</name>
<value>public</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:pointbase:server://localhost/workflow</value>
</parameter>
<parameter>
<name>dirverClassName</name>
<value>com.pointbase.jdbc.jdbcUniversalDriver</value>
</parameter>
</ResourceParams>
</context>

其中<Resource name="jdbc/WorkflowAppDb" auth="Container" type="javax.sql.DataSource"/>定义了一个DataSource,后面的<ResourceParams>...</ResourceParams>定义了该数据库资源的有关参数(比如username,password,driverClassName,URL等)。这些参数和前面讲到的JDBC连接参数内容基本一致。
driverClassName:JDBC驱动器的类名。
password:数据库密码
url:数据库URL
username:数据库用户名
validationQuery:用来在实际程序使用连接之前检测数据库是否工作的SQL访问命令(select 命令)。
在<ReaourceParams>中同时定义了Tomcat的数据库资源工厂(data source resource factory)的参数。Tomcat使用的DBCP数据资源工厂实现了Connection Pool 的功能,默认的数据资源工厂类名为org.apache.naming.factory.DbcpDataSourceFactory(编程者也可以自己编写数据资源工厂,具体参考Tomcat的有关说明)。DBCP数据资源工厂有下面的参数:
maxActive:数据库连接池允许的最大正在使用的连接数目
maxIdle:数据库连接池允许的最大闲置连接数目
maxWait:数据库连接池允许等待的最长时间(毫秒),如果客户等待超过这个时间,连接就弹出例外。

3.定义程序数据资源需求
接下来,应该在WEB-INF/web.xml文件中定义程序所查找和使用的数据资源JNDI名称。
一般Tomcat数据资源默认的名称为jdbc/xxx(相对标准的java:comp/env JNDI根目录名称)。
比如本书的范例Web程序icwork使用数据库名为WorkflowAppDb,它在web.xml中要加入下
面的JNDI资源连接部分。

程序示例如下:

<resource-ref>
<description>
DataSource reference to workflowAppDb defined in server.xml
</description>
<res-ref-name>jdbc/WorkflowAppDb</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

4.在程序中使用数据资源
在程序中,可以通过JNDI查找获得前面定义的数据资源。主要的操作是
使用javax.naming.Context的lookup方法返回一个DataSource对象。数
据库的JNDI名称为"java:comp/env/"加上<resource-ref>中定义的名称,
然后使用DataSource的getConnection方法返回一个数据库连接。其后的
操作和JDBC连接例子中的SQL方法相同。
程序如下:

import javax.naming.*;
import javax.sql.*;
import java.sql.*;

public class WorkflowDBConnector{
public void init(){
try{
Context ctx=new InitialContext();
if(ctx==null){
throw new Exception("Context Look Up Error");
}
DataSource dsource=(DataSource)ctx.lookup("java:comp/env/jdbc/WorkflowAppDb");
if(dsource!=null){
Connection conn=dsource.getConnection();
if(conn!=null){
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery("select * from Concept order by ConceptID");
if(rs.next()){
...
}
conn.close();
}
}
catch(Exception e){
e.printStackTrace();
}
}
}

 

Tomcat8使用数据源的三种方式

Tomcat8使用数据源的方式一(Tomcat8端局部配置) 在Tomcat8的conf/Catalina/localhost目录中添加xml文件使用数据源 此种方式发布项目,是最佳选择。因为...
  • c_g_m
  • c_g_m
  • 2015年10月21日 10:36
  • 4092

Tomcat中数据源(DataSource)连接池的配置使用

大概意思是:     使用数据源之后也同时使用了tomcat自带的连接池(DBCP):容器的连接池设置了一些准备公用的connection,程序用时拿走用,用完再送回池。这些连接由数据源统一管理维护...
  • ruantao1989
  • ruantao1989
  • 2012年10月10日 23:41
  • 3176

JNDI初探之tomcat的datasource配置

有人说:没有掌握JNDI就没有真正的理解JavaEE。 看来我一直都没理解呀!JavaEE 的角色在聊JNDI之前,我们先讨论一下JavaEE的角色吧。 J2EE 规范把职责委托给多个开发角色:组...
  • u011499747
  • u011499747
  • 2016年04月14日 14:10
  • 935

tomcat tomee 配置 数据源 (含 XA 数据源)

1.普通数据源(javax.sql.DataSource) 在 context.xml 中,添加如下内容即可完成数据源创建: ...
  • conquer0715
  • conquer0715
  • 2017年09月14日 18:07
  • 2937

源码解析:Tomcat 7 配置 (XA) 数据源 DataSource XADataSource

典型配置: mysql:
  • conquer0715
  • conquer0715
  • 2016年03月21日 17:33
  • 6567

Tomcat配置DataSource

修改Tomcat_Home/conf/server.xml,在GlobalNamingResources中加入: Xml代码
  • ylx_thinking
  • ylx_thinking
  • 2010年06月29日 17:19
  • 2754

在Tomcat配置JNDI数据源的三种方式

在我过去工作的过程中,开发用服务器一般都是Tomcat 数据源的配置往往都是在applicationContext.xml中配置一个dataSource的bean 然后在部署时再修改JND...
  • z69183787
  • z69183787
  • 2014年04月02日 11:27
  • 2459

在Tomcat配置和使用数据库资源(DataSource)

主题:使用数据库资源由于很多WEB程序需要通过Jdbc访问数据库,J2EE标准规定了J2EE应用程序服务器要提供支持JDBC和连接池的数据库资源(DataSource).这样WEB程序不必自己实现JD...
  • wuqingyong
  • wuqingyong
  • 2006年09月07日 00:12
  • 2422

在Tomcat中配置DataSource

进入Tomcat的 Server Administration(http://localhost:8080/admin/)             JNDI Name: jdbc/certif...
  • fantacyland
  • fantacyland
  • 2007年06月05日 13:24
  • 450

Tomcat配置DataSource

一、数据源简介: ************************************************************************************ 在Java语...
  • bigtree_3721
  • bigtree_3721
  • 2016年03月09日 20:00
  • 492
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在Tomcat配置和使用数据库资源(DataSource)
举报原因:
原因补充:

(最多只允许输入30个字)