`

Tomcat中数据源的配置及原理

阅读更多

一:数据源介绍 数据源简介

JDBC2.0提供了javax.sql.DataSource的接口,负责与数据库建立连接,实际应用时不需要编写连接数据库代码,可以直接从数据源获得数据库的连接,使得应用于数据库的耦合降低。

 

Dataource中事先建立了多个数据库连接,这些数据库连接保持在数据库连接池中,当程序访问数据库时,只需要从连接池从取出空闲的连接,访问数据库结束,在将这些连接归还给连接池。DataSource对象由容器(Tomcat)提供,不能使用创建实例的方法来生成DataSource对象,要采用JAVA的JNDI(Java Nameing and Directory Interface,java命名和目录接口)来获得DataSource对象的引用。(另有一种说法:“其实从技术上来说,数据源连接方式是不需要目录服务的,我们同样可以通过序列化数据源对象直接访问文件系统。这点是需要明确的。”感兴趣的朋友可以试试。)

 

JNDI是一种将对象和名字绑定的技术,对象工厂负责生产出对象,这些对象都和唯一的名字相绑定。程序中可以通过这个名字来获得对象的引用。Tomcat把DataSource作为一种可配置的JNDI资源来处理,生成DataSource对象的工厂为rg.apache.comm.ons.dbcp.BasicDataSourceFactory。

 

二:配置数据源

配置数据源其实相当简单,可以配置单个应用的数据源,也可以配置整个容器的数据源。以下详细说明如何配置单个应用的数据源。

 

1.准备工作

Tomcat4.1.24 (其它版本也可以,原理相通的) 

确认在%Tomcat _Home%\common\lib下有commons-collections.jar、commons-dbcp.jar、commons-pool.jar包(tomcat默认有这些包),如果没现有,请到此地下载:http://tomcat.apache.org/ 。这三个包是必需的。

 

下载相应数据库驱动,放在%Tomcat _Home%\common\lib下。本例以oracle数据库为例,使用的驱动包为:jdbc14.jar, 数据库为Oracle9i,确认在%Tomcat _Home%\common\lib下有jndi.jar、dbc2_0-stdext.jar(tomcat默认有这些包)。

 

2.配置单个应用的数据源

2.1配置server.xml文件

首先打开%Tomcat _Home%\conf下 server.xml文件,在相应的<Context>中加入<Resource>元素,在<Context>(你的应用配置上下文)中加入以下代码(以MySql为例):

 

 

<Context path="/test" docBase="E:\JAVA\mytest\webapp" > 

    <Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource"/> 

    <ResourceParams name="jdbc/test"> 

       <parameter> 

           <name>username</name> 

           <value>root</value> 

       </parameter> 

       <parameter> 

           <name>password</name> 

           <value></value> 

       </parameter> 

       <parameter> 

           <name>driverClassName</name> 

           <value>com.mysql.jdbc.Driver</value> 

       </parameter> 

       <parameter> 

           <name>url</name> 

           <value>jdbc:mysql://localhost/dlog</value> 

       </parameter> 

    </ResourceParams> 

</Context>

 

2.2< Resource >配置说明如下:

 

描述

name

指定ResourceJNDI的名字

auth

指定管理ResourceManager,由两个可选值:ContainerApplicationContainer表示由容器来创建和管理ResourceApplication表示由WEB应用来创建和管理Resource。如果在web application deployment descriptor中使用<resource-ref>,这个属性是必需的,如果使用<resource-env-ref>,这个属性是可选的。

type

指定Resource所属的java类名

 

2.3<ResourceParams>元素的属性如下:

 

描述

name

指定ResourceParamsJNDI的名字,必须和Resourcename保持一致

factory

指定生成DataSource对象的factory的类名

maxActive

指定数据库连接池中处于活动状态的数据库连接最大数目,0表示不受限制

maxldle

指定数据库连接池中处于空闲状态的数据库连接的最大数目,0表示不受限制

maxwait

指定数据库连接池中的数据库连接处于空闲状态的最长时间(单位为毫秒),超过这一事件,将会抛出异常。-1表示可以无限期等待。

username

指定连接数据库的用户名

password

指定连接数据库的密码

driverClassName

指定连接数据库的JDBC驱动程序

url

指定连接数据库的URL

 

 

2.3引用数据源


 如果在web应用中访问了由Servlet容器管理的某个JNDI Resource,则必须在web.xml中声明对这个JNDI Resource的引用。表示资源引用的元素为<resource-ref>,该元素加在<wepapp></ wepapp >中。

 打开你的应用配置文件web.xml,输入以下粗体部分:


 <wepapp> ……

<resource-ref>

       <description>connectDB test</description>

       <res-ref-name>jdbc/test</res-ref-name>

       <res-type>javax.sql.DataSource</res-type>

       <res-auth>Container</res-auth>

    </resource-ref>

</ wepapp >

 


2.4<resource-ref>元素的属性如下:


 描述:description  对所引用的资源的说明;
res-ref-name 指定所引用资源的JNDI名字,与<Resource>元素中的name属性保持一致;
res-type  指定所引用资源的类名字,与<Resource>元素中的type属性保持一致;

res-auth  指定所引用资源的Manager,与<Resource>元素中的auth属性保持一致;

 


2.5测试数据源   

 首先,检查Tomcat的%Tomcat _Home%\common\lib下有commons-collections.jar、commons-dbcp.jar、commons-pool.jar包,如果没现有,请到此地下载:http://tomcat.apache.org/    

 注意以上三个包不要引入你的工程类路径,否则可能报错。

 

 然后,将驱动包放入%Tomcat _Home%\common\lib下,注意包必须为.jar后缀。Tomcat只认.jar包。 配置完成后,写个测试,如下:

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*"%>
<%@ page import="javax.naming.*"%>
<%@ page import="javax.sql.*"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD 
HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<%
Context initContext = new InitialContext();
Context envContext = (Context) initContext.lookup("java:/comp/env");
DataSource db = (DataSource)envContext.lookup("jdbc/myoracle ");

//javablogorl为<Resource>元素中name属性的值
Connection conn = db.getConnection( );
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM test");
while(rs.next()){
out.print(rs.getString("admin_name")+" ");
out.print(rs.getString("admin_password")+"<br>");
}
rs.close();
stmt.close();
conn.close(); 

%>
</body>
</html>

 

 如果输出你期望的结果,表示数据源配置成功。

 

3.配置容器全局数据源
以上配置的数据源为单个应用使用的数据源,只能为单个应用所使用,下面我们配置全局的数据源,所有的应用都可以使用,通过引用很自然的使用全局数据源。准备工作同上。


3.1 配置server.xml文件

首先打开%Tomcat _Home%\conf下 server.xml文件,在<GlobalNamingResources>下输入以下粗体部分:

 

<GlobalNamingResources> ……


    <Context path="/test" docBase="E:\JAVA\mytest\webapp" > 

    <Resource name="jdbc/test" auth="Container" type="javax.sql.DataSource"/> 

    <ResourceParams name="jdbc/test"> 

       <parameter> 

           <name>username</name> 

           <value>root</value> 

       </parameter> 

       <parameter> 

           <name>password</name> 

           <value></value> 

       </parameter> 

       <parameter> 

           <name>driverClassName</name> 

           <value>com.mysql.jdbc.Driver</value> 

       </parameter> 

       <parameter> 

           <name>url</name> 

           <value>jdbc:mysql://localhost/dlog</value> 

           </parameter> 

        </ResourceParams> 

</Context>

</GlobalNamingResources>

 

 

3.2 引用数据源

由于我们配置的是容器全局数据源,因此所有的应用都可以引用这个数据源。在你的应用中建立引用,在<Context></Context>之间输入以下粗体部分:

<Context path="/test" docBase="E:\JAVA\mytest\webapp" >

<ResourceLink name="myDB" global="jdbc/test"  type="javax.sql.DataSource"/>

</Context>

 


3.3 配置应用文件web.xml

打开你的应用配置文件web.xml,输入以下粗体部分:

 

<wepapp> …… 

<resource-ref>

       <description>connectDB test</description>

       <res-ref-name>jdbc/test</res-ref-name>

       <res-type>javax.sql.DataSource</res-type>

       <res-auth>Container</res-auth>

    </resource-ref>

</ wepapp >

 

 3.4测试  创建测试文件:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*"%>
<%@ page import="javax.naming.*"%>
<%@ page import="javax.sql.*"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD 
HTML 4.01 Transitional//EN">
<html>
<head>
</head>
<body>
<%
Context initContext = new InitialContext();
Context envContext = (Context) initContext.lookup("java:/comp/env");
DataSource db = (DataSource)envContext.lookup("myDB ");//名称与web.xml配置中的一致

//javablogorl为<Resource>元素中name属性的值
Connection conn = db.getConnection( );
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM test");
while(rs.next()){
out.print(rs.getString("admin_name")+" ");
out.print(rs.getString("admin_password")+"<br>");
}
rs.close();
stmt.close();
conn.close();

%>
</body>
</html>

 

 

如果输出你期望的结果,表示数据源配置成功。


Hibernate.cfg.xml文件中删除所有连接数据库的配置参数,添加connection.datasource属性,其中jdbc/test为数据源在应用服务器中的JNDI名:

<property name="connection.datasource">java:/comp/env/jdbc/test</property>

 

 

分享到:
评论

相关推荐

    详细介绍在tomcat中配置数据源原理

    详细介绍在tomcat中配置数据源原理

    jdbc 简介 如何在tomcat 中配置数据源

    本文根据实例详细介绍了如何在tomcat 中配置数据源。网上此类文章很多,但是基本都是 雷同的,而且对一些特殊问题以及原理并未详细阐述,所以想根据自己的实际经验,并结合 例子写一篇详细的文章。

    基于Tomcat 数据源的原理、配置、使用介绍

    1、数据源的作用及操作原理  在程序代码中使用数据源是可以提升操作性能的,这种性能的提升依靠于运行的原理。  传统JDBC操作步骤 1、加载数据库驱动程序,数据库驱动程序通过CLASSPATH配置; 2、通过...

    Tomcat使用技巧集合

    包含以下资源 Tomcat6_调优设置内存和连接数 Tomcat+jndi+配置数据源过程 详细讲解tomcat工作原理 tomcat数据库连接池配置网上文章+csdn上的代码 疯狂的IT人整理Apache、Tomcat集群和负载均衡 Tomcat优化配置

    Java Web开发与实战:Eclipse+Tomcat+Servlet+JSP整合应用(含光盘源代码)

    主要内容包括web应用程序运行原理、主流集成开发工具(eclipse/myeclipse)和运行环境(tomcat)的配置和使用、servlet、jsp、jdbc、jsp表达式语言(el)、servlet监听器和过滤器、定制标记库、jstl、mvc模式、dao...

    《Java Web开发与实战--Eclipse+Tomcat+Servlet+JSP整合应用》.(刘伟,张利国).[PDF].zip

    主要内容包括web应用程序运行原理、主流集成开发工具(eclipse/myeclipse)和运行环境(tomcat)的配置和使用、servlet、jsp、jdbc、jsp表达式语言(el)、servlet监听器和过滤器、定制标记库、jstl、mvc模式、dao...

    Spring Boot实战与原理分析视频课程包含14-18

    --多种数据源的配置、JdbcTemplate、事务的处理 20 Spring Boot AOP 21 Spring Boot Starter18:31 --快速构建自定义的Spring Boot Starter 22 Spring Boot 日志30:58 --演示了如何在Spring Boot里面使用日志配置...

    JDBC数据库编程实验

    一、实验目的: ...(5)理解数据库连接池的基本原理和思想,学会在tomcat服务器中配置数据库连接池,并掌握从连接池中获取连接的基本方法。 (6)初步理解数据访问层的基本设计方法,理解web的分层架构。

    Eclipse开发入门与项目实践 源代码

    3.4.1 配置数据源 95 3.4.2 连接ODBC数据源 97 案例3-4 实现不同类型数据库之间的数据迁移 99 第4章 Eclipse中Web应用开发 103 4.1 Eclipse中Java Web开发环境的搭建 103 4.1.1 安装应用服务器Tomcat ...

    JDBC 3.0数据库开发与设计

    4.7.5 包含连接池的数据源配置 4.7.6 池连接对象对于语句的重新利用 4.7.7 关闭池连接语句 4.7.8 连接池使用实例 4.8 分布式事务处理 4.8.1 XADataSource接口和XAConnection接口 4.8.2 事务管理器 4.8.3 关闭...

    落雨博客基于CAS框架的单点登录技术讲解(ppt+code实例+doc)配套资料

    [置顶] SSO单点登录系列3:cas-server端配置认证方式实践(数据源+自定义java类认证) http://blog.csdn.net/ae6623/article/details/8851801 [置顶] SSO单点登录系列2:cas客户端和cas服务端交互原理动画图解,cas...

    java web 视频、电子书、源码(李兴华老师出版)

    0311_Tomcat数据源 0312_JSP标签编程 0313_JSP标准标签库(JSTL) 0314_AJAX开发技术 0400_第四部分:框架开发 0415_Struts基础开发 0416_Struts常用标签库 0417_Struts高级开发 0500_第五部分:附录 0518_...

    看透springMvc源代码分析与实践

    7.1 Tomcat的顶层结构及启动过程44 7.1.1 Tomcat的顶层结构44 7.1.2 Bootstrap的启动过程45 7.1.3 Catalina的启动过程47 7.1.4 Server的启动过程48 7.1.5 Service的启动过程50 7.2 Tomcat的生命周期管理52 ...

    Eclipse开发分布式商城系统+完整视频代码及文档

    │ 06.jedis客户端在spring中的配置.avi │ 07.测试spring中的JedisClient.avi │ 08.缓存同步-服务发布.avi │ 09.后台调用缓存同步服务.avi │ 10.solr单机版安装.avi │ 11.中文分析器配置.avi │ 12.导入数据-...

    Spring.3.x企业应用开发实战(完整版).part2

    8.4.1 配置一个数据源 8.4.2 获取JNDI数据源 8.4.3 Spring的数据源实现类 8.5 小结 第9章 Spring的事务管理 9.1 数据库事务基础知识 9.1.1 何为数据库事务 9.1.2 数据并发的问题 9.1.3 数据库锁机制 9.1.4 事务隔离...

    JSP网站开发典型模块与实例精讲

    书名:JSP网站开发典型模块与... 3.2.1 连接数据源  3.2.2 浏览讨论区  …… 第4章 访问统计模块设计 第5章 新闻发布系统 第6章 网上数码冲印系统 第7章 在线考试系统 第8章 在线书店系统 第9章 权限管理系统

    Spring3.x企业应用开发实战(完整版) part1

    8.4.1 配置一个数据源 8.4.2 获取JNDI数据源 8.4.3 Spring的数据源实现类 8.5 小结 第9章 Spring的事务管理 9.1 数据库事务基础知识 9.1.1 何为数据库事务 9.1.2 数据并发的问题 9.1.3 数据库锁机制 9.1.4 事务隔离...

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    这些源代码全部经过精心调试,能够在Windows XP、WindowsServer2003及Windows7操作系统下编译和运行。 《Java Web编程宝典(十年典藏版)》适用于Java Web的初学者、编程爱好者,同时也可以作为培训机构、大中专院校...

    jsp+servlet开发java web图书后台管理系统

    此版本直接将数据存到request域中。request是负责页面之间传递参数和数据的类,是java封装好的,你只要把它当成一个工具就可以了,就好比你用遥控器控制电视,你并不需要详细了解遥控器的工作原理。所以不用配置...

Global site tag (gtag.js) - Google Analytics