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. GOF23设计模式之单例模式

    ·核心作用: -保证一个类只有一个实例,并且提供一个访问该实例的全局访问点. ·常见应用场景: -Windows的Task Manager(任务管理器)就是很典型的单例模式 -Windows的Recy ...

  2. 开始webservice了

    一.WebService到底是什么 一言以蔽之:WebService是一种跨编程语言和跨操作系统平台的远程调用技术. 所谓跨编程语言和跨操作平台,就是说服务端程序采用java编写,客户端程序则可以采用 ...

  3. java I/O流

    输入流(读取数据的流) BufferedInputStream---继承--->FileInputStream--继承--->InputStream------> (1)字节流操作中 ...

  4. Alwayson的IP冲突

    Alwayson的IP冲突 https://social.technet.microsoft.com/Forums/office/en-US/4d50cb1c-eef7-4dcc-b937-3c8eb ...

  5. Ubuntu Server(Ubuntu 14.04 LTS 64位)安装libgdiplus2.10.9出错问题记录

    首先下载libgdiplus2.10.9安装包 wget http://download.mono-project.com/sources/libgdiplus/libgdiplus-2.10.9.t ...

  6. 简述 OAuth 2.0 的运作流程

    本文将以用户使用 github 登录网站留言为例,简述 OAuth 2.0 的运作流程. 假如我有一个网站,你是我网站上的访客,看了文章想留言表示「朕已阅」,留言时发现有这个网站的帐号才能够留言,此时 ...

  7. 程序猿是如何解决SQLServer占CPU100%的

    文章目录 遇到的问题 使用SQLServer Profiler监控数据库 SQL1:查找最新的30条告警事件 SQL2:获取当前的总报警记录数 有哪些SQL语句会导致CPU过高? 查看SQL的查询计划 ...

  8. [译]基于GPU的体渲染高级技术之raycasting算法

    [译]基于GPU的体渲染高级技术之raycasting算法 PS:我决定翻译一下<Advanced Illumination Techniques for GPU-Based Volume Ra ...

  9. hibernate学习笔记之二 基本环境搭建

    1.创建一个普通的java项目 2.加入Hibernate所有的jar包 3.建立包名com.bjpowernode.hibernate 4.建立实体类User.java package com.bj ...

  10. iOS集成sharesdk遇到的坑

    分享新浪微博 ★★★分享新浪微博★★★ 前言: 写这个目地是为了记录那些过坑,直接先上效果图.大家看看如果你遇到了应该如果处理更好,因为刚一看到这个效果的时候就明白其实很简单不就是分享微博吧.但是要求 ...