JDBC2.0提供了javax.sql.DataSource接口,它负责建立与数据库的连接,在应用程序中访问数据库时不必编写连接数据库的代码,可以直接从数据源获得数据库连接

1.数据库和连接池

  在DataSource中事先建立了多个数据库连接,这些数据库连接保存在连接池(ConnectPool)中。java程序访问数据库时,只需要从连接池中取出空闲状态的数据库连接,当程序访问数据库结束,再将数据库连接放回连接池,这样做可以调高访问数据库的效率。

  如果Web应用每次接收到客户的请求,都和数控建立一个连接,数控操作结束就断开连接,这样会消费大量的时间和资源。因为数据库每次配置连接都要将Connection对象加载到内存中,再验证用户名和密码。

2.数据源和JNDI资源

  由于DataSource对象是由Tomcat提供的,因此不能够在程序中创建一个DataSource对象,而要采用JNDI技术来获得DataSource对象的引用。

  可以简单的把JNDI理解为一种将对象和名字绑定的技术,对象工厂负责生产出对象,这些对象都和唯一的名字绑定,外部程序可以通过名字来获得某个对象的引用。在javax.naming包中提供了Context接口,该接口提供了将对象和名字绑定,以及通过名字检索对象的方法。

  Context接口方法

方 法 描 述
bind(String name,Object obj) 将对象与一个名字绑定
lookup(String name) 返回与指定的名字绑定的对象

  Tomcat把DataSource作为一种可配置的JNDI资源来处理。生成DataSource对象的工厂org.apache.commons.dbcp.BasicDataSourceFactory。

3.配置数据源

  数据源的配置涉及修改server.xml和web.xml文件

  (1)在server.xml中加入<Resource>元素

    <Resource>元素用来定义JNDI Resource。例如:

    <Context path="/bookstore" docBase="bookstore" debug="0" reloadable="true">

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

    <ResourceParams name="jdbc/BookDB">

      <parameter>

        <name>factory</name>

        <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>

      </parameter>

      

      <parameter>

        <name>maxActive</name>

        <value>100</value>

       </parameter>

      <parameter>

        <name>maxIdle</name>

        <value>30</value>

        </parameter>

      <parameter>

        <name>maxWait</name>

        <value>10000</value>

      </parameter>

     

      <parameter>

        <name>username</name>

        <value>dbuser</value>

      </parameter>

      <parameter>

        <name>password</name>

        <value>123456</value>

      </parameter>

      <parameter>

        <name>driverClassName</name>

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

      </parameter>

  

      <parameter>

        <name>url</name>

        <value>jdbc:mysql://localhost:3306/BookDB?autoReconnect=true</value>

      </parameter>

    </ResourceParams>

</Context>

<Resource>属性说明:

  name:指定Resource的JNDI名字。

  auth:指定管理Resource的Manager.它有两个值可选:Container和Application。Container表示由容器来创建和管理Resource,Application表示由Web应用来创建和管理Resource

  type:指定Resource所属的JAVA类名。

在<ResourceParam>元素中指定了配置BookDB数据源的参数,<ResourceParam>元素的参数说明如下:

  factory:指定生成DataResource的factory类名。

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

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

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

  username:指定连接数据库用户名

  password:指定连接数据库密码

  driverClassName:指定连接数据库的JDBC驱动

  url:指定连接数据库的URL。

(2)在web.xml中加入<resource-ref>元素

  如果web应用访问了由servlet容器管理的某个JNDI Resource,必须在web.xml文件中声明对这个JNDI Resource的引用。表示资源引用的元素为<resource-ref>,以下是声明应用jdbc/BookDB数据源代码

  <webapp>

    <resource-ref>

      <description>DB Connection</description>

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

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

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

    </resource-ref>

  </webapp>

resource-ref属性说明:

   description:指定所引用的资源的说明

   res-ref-name:指定所引用资源的JNDI名字,与<Resource>元素中name属性对应

    res_type:指定所引用资源的类名,与<Resource>元素中的type属性对应

   res-auth:指定管理所引用资源的Manager,与<Resource>元素中的auth属性对应

4.程序中访问数据源

  javax.naming.Context提供了查找JNDI Resource的接口,例如:可以通过以下代码获得jdbc/BookDB数据源的应用:

    Context ctx = new InitialContext();

    DataSource ds =(DataSource)ctx.lookup("java:comp/env/jdbc/BookDB");

  得到DataSource对象的引用后,就可以通过DataSource的getConnection()方法获得数据库的连接对象:

    Connection con = ds.getConnection();

  当程序结束数据库访问后,应该调用Connection的close()方法,及时将Connection返回数据库连接池,使Connection恢复空闲状态。

Tomcat数据源(DataSource)简介的更多相关文章

  1. JDBC 学习复习9 配置Tomcat数据源

    在实际开发中,我们有时候还会使用服务器提供给我们的数据库连接池,比如我们希望Tomcat服务器在启动的时候可以帮我们创建一个数据库连接池,那么我们在应用程序中就不需要手动去创建数据库连接池,直接使用T ...

  2. Tomcat数据源

    Tomcat数据源原理,配置,使用 在程序中,使用数据源是可以提升操作性能的,这种性能 的提升依靠运行的操作原理. 传统的JDBC操作: 1. 加载数据库驱动,通过CLASSPATH配置 2. 通过D ...

  3. Tomcat数据源的原理,配置及使用(JNDI)

    Tomcat数据源的原理,配置及使用 知识点: 1.数据源的作用及操作原理; 2.Tomcat中数据源的配置; 3.数据源的查找及使用 传统JDBC使用过程存在以下四个步骤: 1.加载驱动程序 2.进 ...

  4. JDBC数据源(DataSource)数据源技术是Java操作数据库的一个很关键技术,流行的持久化框架都离不开数据源的应用。

    JDBC数据源(DataSource)的简单实现   数据源技术是Java操作数据库的一个很关键技术,流行的持久化框架都离不开数据源的应用. 2.数据源提供了一种简单获取数据库连接的方式,并能在内部通 ...

  5. iOS基础 - UITableView的数据源(dataSource)和代理(delegate)

    UITableView的数据源(dataSource)和代理(delegate) UITableView需要一个数据源(dataSource)来显示数据,UITableView会向数据源查询一共有多少 ...

  6. 07.十分钟学会tomcat数据源

    一.数据源的作用及操作原理 1,  首先先看下传统JDBC的操作 在tomcat中使用数据库连接池操作数据库 2,JNDI属于命名及目录查找接口,在javaee的javax.naming包中 这套AP ...

  7. flink学习笔记-数据源(DataSource)

    说明:本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKh ...

  8. java web(二) Tomcat数据源

    一.数据源的产生 1.JDBC操作原理 (1) 加载数据库驱动程序(数据库驱动程序可通过classpath配置): Class.forName(); (2)通过DriverManager类取得数据库连 ...

  9. Tomcat 5.5 JNDI Resource 配置 (tomcat数据源配置)

    转自:http://blog.csdn.net/fenglibing/article/details/4528512 Tomcat 5.5 JNDI Resource 配置 Author Blog:h ...

随机推荐

  1. 使用python自动生成docker nginx反向代理配置

    由于在测试环境上用docker部署了多个应用,而且他们的端口有的相同,有的又不相同,数量也比较多,在使用jenkins发版本的时候,不好配置,于是想要写一个脚本,能在docker 容器创建.停止的时候 ...

  2. 【原】无脑操作:express + MySQL 实现CRUD

    基于node.js的web开发框架express简单方便,很多项目中都在使用.这里结合MySQL数据库,实现最简单的CRUD操作. 开发环境: IDE:WebStorm DB:MySQL ------ ...

  3. JAVA环境变量和TomCat服务器配置

    Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选.对于一个初学者来说,可以这样 ...

  4. SQL SERVER导入数据到ORACLE的方法总结

    我们偶尔会有将数据从SQL SERVER导入到ORACLE当中的这种需求,那么这种跨数据库导数有那些方法呢?这些方法又有那些利弊呢? 下面比较肤浅的总结了一些可行的方法. 1:生成SQL脚本然后去OR ...

  5. 一步步开发自己的博客 .NET版(3、注册登录功能)

    前言 这次开发的博客主要功能或特点:    第一:可以兼容各终端,特别是手机端.    第二:到时会用到大量html5,炫啊.    第三:导入博客园的精华文章,并做分类.(不要封我)    第四:做 ...

  6. 开源一个WEB版本GEF,基于SVG的网页流程图框架

    8月开始断断续续的制作这个web gef,没有任何依赖,完全原生js开发,目前已经完成了雏形,基本上可以在项目里应用了. 下图展示的是demo1的效果,包括拖拽,生成连线,点击生成\取消墙体,整个de ...

  7. 用java开发微信公众号:接收和被动回复普通消息(三)

    上篇说完了如何接入微信公众号,本文说一下微信公众号的最基本功能:普通消息的接收和回复.说到普通消息,那么什么是微信公众号所定义的普通消息呢,微信开发者文档中提到的接收的普通消息包括如下几类: 1.文本 ...

  8. out和ref详解

    要想充分理解C# out和ref,必须先明确如下两个概念(对值类型与引用类型掌握比较好的,可以跳过"一.明确两个基本概念") 一.明确两个基本概念 值类型: 定义:通过值的方式来传 ...

  9. java类的加载机制

    什么是类装载器ClassLoader ClassLoader是一个抽象类 ClassLoader的实例将读入Java字节码将类装载到JVM中 ClassLoader可以定制,满足不同的字节码流获取方式 ...

  10. 今天有群友不是很清楚htm直接存数据库的危害,我简单举个例子

     通过这个案例就知道为什么不要把原生的html放数据库了  常见的几种转码  常用的几种显示方法 只有原生html和最下面一种弹框了,变成了持久xss 如果是Ajax的方式,请用@Ajax.JavaS ...