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的牛比与不爽

    本人写了10年php了.今年开始改写python了.不是说php有什么不好,php在自己的势力范围内还是很牛比的.只是我已经不能满足于php那两亩地了. 习惯了脚本,所以很自然就过度到python了. ...

  2. 数塔问题(DP算法)自底向上计算最大值

    Input 输入数据首先包括一个整数C,表示测试实例的个数,每个测试实例的第一行是一个整数N(1 <= N <= 100),表示数塔的高度,接下来用N行数字表示数塔,其中第i行有个i个整数 ...

  3. 张高兴的 UWP 开发笔记:汉堡菜单进阶

    不同于Windows 8应用,Windows 10引入了"汉堡菜单"这一导航模式.说具体点,就拿官方的天气应用来说,左上角三条横杠的图标外加一个SplitView控件组成的这一导航 ...

  4. Ajax.BeginForm方法 参数

    感谢博主 http://www.cnblogs.com/zzgblog/p/5454019.html toyoung 在Asp.Net的MVC中的语法,在Razor页面中使用,替代JQuery的Aja ...

  5. mysql源码包手动安装、配置以及测试(亲测可行)

    笔记编者:小波/qq463431476博客首页:http://www.cnblogs.com/xiaobo-Linux/ 记下这篇mysql笔记,望日后有用! redhat6采用centos yum源 ...

  6. 整体二分QAQ

    POJ 2104 K-th Number 时空隧道 题意: 给出一个序列,每次查询区间第k小 分析: 整体二分入门题? 代码: #include<algorithm> #include&l ...

  7. thinkphp-无限分类下根据任意部门获取顶级部门ID

    根据所得到的部门编号获取顶级部门ID: 参数 - department_id 表格组织架构: tab_departments department_id parent_id name 1 1 顶级 2 ...

  8. C#迪杰斯特拉算法

    C#迪杰斯特拉算法 网上有许多版本的,自己还是写一个理解点 Dijkstra.cs public class Dijkstra { private List<Node> _nodes; p ...

  9. 浅谈SOA

    概念 wiki对于SOA定义如下: A service-oriented architecture (SOA) is a design pattern in which application com ...

  10. AngularJS 第四天----控制器

    控制器的作用 今天和大家学习AngularJS中控制器方面的知识,本文会给出一些例子来说明如何使用AngularJS的控制器.在开始我们的例子之前,首先说说AngularJS控制器的作用.简单的来说A ...