学习要点

  • JNDI
  • 数据库连接池
  • 完成新闻发布系统数据库连接池

JNDI

说明

JNDI(Java Naming and Directory Interface),中文翻译为Java命名与目录接口,是一个为应用程序设计的API,为开发人员提供了查找和访问各种命名和目录的统一、统一接口。

简而言之,JNDI就是通过名称将资源与服务进行关联的技术。JNDI可以访问的目录和服务有:DNS、文件服务、数据库等等。

案例

需求描述:如何实现在Tomcat中发布一条信息供所有的Web应用程序使用?

需求分析:类似于全局变量application,但application只用于本Web应用程序共享数据。

解决方案

  • 第一步发布信息:修改Tomcat\conf\context.xml文件。
<Context>
<Environment name="testjndi" value="hello JNDI" type="java.lang.String" />
</Context>

  

context文件是全局的上下文配置文件,对所有的web应用程序有效。

<Environment>元素用于配置命名的值,所配置的值作为环境条目资源,对整个web应用可见。包含属性有:name、value、type。

name:环境条目的名称,相对于java:comp/env的名称。

type:环境条目的java类全名。

value:通过JNDI context请求时,返回给应用的参数值,该值必须转换成type属性定义的Java类型。

  • 第二步获取资源:使用lookup()进行查找
	<%
//javax.naming.Context提供了查找JNDI 的接口
Context ctx = new InitialContext();
//java:comp/env/为前缀
String testjndi = (String) ctx.lookup("java:comp/env/testjndi");
out.print("JNDI:" + testjndi);
%>

  

为了避免JNDI空间中资源名称的相互冲突,并确保避免可移植性问题,JavaEE应用程序中的所有命名应以字符串“java:comp/env”作为前缀。

  • 运行结果

上机练习:在Tomcat中发布一条信息供所有的Web应用程序使用

参考演示实例完成上级练习。

数据库连接池

JDBC访问数据库的缺点

  • 需要经常与数据库建立连接
  • 在访问结束后必须要关闭连接释放资源
  • 当并发访问数量较大时,网站速度收到极大影响
  • 系统的安全性和稳定性相对较差

所以,项目上线后考虑采用数据库连接池技术。开发测试阶段建议采用JDBC方式,JDBC便于调试。

数据库连接池

  • 定义

数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新创建一个;释放空闲时间超过做大空闲时间的数据库连接,以避免没有释放数据库连接而引起的数据库连接遗漏。

  • 连接池管理连接
  1. 数据库连接池的基本思想就是为数据库连接建立一个“空闲池”。预先在空闲池中放入一定数量的连接。
  2. 当需要建立数据库连接时,系统检查空闲池中是有有连接,如果有,则从“空闲池”中取出一个。如果没有,则判断是否已经达到连接池所允许的最大连接数,若没有达到最大连接数,则新建一个连接返回;如果已经达到最大连接数,则继续等待,直到有空闲连接;如果超过预定等待时间,则返回一个NULL连接。
  3. 应用程序使用完连接,放回连接池。
  4. 我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量﹑使用情况,为系统开发﹑测试及性能调整提供依据。

数据源

  • javax.sql.DataSource用来负责建立与数据库的连接,他是用来描述现实存在的数据源,配置好的数据库连接池就是以数据源的形式存在的。
  • 数据源(DataSource)
  1. 从Tomcat的数据源获得连接
  2. 把连接返回给连接池
  • 数据源的close()方法是把连接返回给数据库连接池。
  • DataSource对象是由Web容器提供的。
  • 连接池中(DataSource)的连接由web容器创建。

数据源与JNDI资源

DataSource对象是web容器提供的,如何获取DataSource对象呢?

通过JNDI来获取!

<%
//初始化上下文
Context ctx = new InitialContext();
//获得与逻辑名称相关联的数据源对象
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/news");
//获得连接
Connection conn = ds.getConnection();
%>

  

数据源的配置

  • 第一步:配置context.xml文件:在<Context>节点下添加如下内容
	  <Resource name="jdbc/news" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000" username="root"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mynews?" />

  

Resource属性说明

属性名称

说明

name

指定Resource的JNDI名称

auth

指定管理Resource的Manager。有两个值:Container:由容器创建和管理;Application:由Web应用创建和管理。

type

指定Resource所属的Java类

maxActive

指定连接池中处于活动状态的数据库连接的最大数目

maxIdle

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

maxWait

指定连接池中的连接处于空闲的最长时间。-1表示无限等待

username

指定连接数据库的用户名

password

指定连接数据库的口令

driverClassName

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

url

指定连接数据库的URL

数据源除了可以配置在tomcat中,还可以配置在项目中:在webroot目录下的META-INF中,创建一个context.xml文件,添加<Context>节点,然后在<Context>节点添加Resource子节点以及各属性。

  • 第二步:配置web.xml文件

在WEB-INF/web.xml文件中的<web—app>节点下添加<resource-ref>元素

<!-- 数据源配置 -->
<resource-ref>
<description>news_db</description>
<!-- 指定JNDI的名字,与<Resource>元素中的name一致 -->
<res-ref-name>jdbc/news</res-ref-name>
<!-- 指定引用资源的类名,与 <Resource>元素中的type一致 -->
<res-type>javax.sql.DataSource</res-type>
<!-- 指定管理所引用资源的Manager与<Resource>元素中的auth一致 -->
<res-auth>Container</res-auth>
</resource-ref>
  • 第三步:把数据库驱动添加到WEB-INF/lib/中,并为项目构建驱动路径。
  • 第四步:修改BaseDao中的数据库连接方法
        // 关键代码
Context ctx = new InitialContext();
// 获得与逻辑名称相关联的数据源对象
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/news");
// 获得连接
conn = ds.getConnection();

  

  

上机练习

需求描述

修改新闻发布系统的数据库连接,使用连接池技术。

实现思路

  1. 配置/tomcat安装目录/conf/context.xml文件(或者在项目META-INFO中添加context.xml文件)
  1. 配置/webRoot/WEB-INF/web.xml文件
  2. 在lib目录中添加数据库驱动jar文件
  3. 在BaseDao中获取数据连接方法中编写代码,实现查找数据源

JavaEE-04 数据源配置的更多相关文章

  1. JNDI数据源配置

    一.数据源的由来 在Java开发中,使用JDBC操作数据库的四个步骤如下:   ①加载数据库驱动程序(Class.forName("数据库驱动类");) ②连接数据库(Connec ...

  2. 沉淀,再出发——在Ubuntu Kylin15.04中配置Hadoop单机/伪分布式系统经验分享

    在Ubuntu Kylin15.04中配置Hadoop单机/伪分布式系统经验分享 一.工作准备 首先,明确工作的重心,在Ubuntu Kylin15.04中配置Hadoop集群,这里我是用的双系统中的 ...

  3. Tomcat数据源配置方法总结

    最近接触的数据表管理项目,涉及到了数据源配置,所以整理了一下配置方法: JNDI数据源统一都是在Tomcat下server.xml中配置的,根据应用范围的差别又分为一下几种方式: 第一种:配置单个应用 ...

  4. Tomcat 6 部署工程总结,使用JNDI数据源配置

    工程需要用JNDI数据源方式部署到tomcat,参考网上文章后,经过配置测试,摸索出来了.     环境说明: 数据库:Oracle9i Web服务器:tomcat-6.0.33 tomcat启动方式 ...

  5. spring 4 + jpa(hibernate 3/4) + spring mvc 多数据源配置

    先从persistence.xml开始: <?xml version=”1.0″ encoding=”UTF-8″?><persistence version=”2.1″ xmlns ...

  6. 【spring boot】12.spring boot对多种不同类型数据库,多数据源配置使用

    2天时间,终于把spring boot下配置连接多种不同类型数据库,配置多数据源实现! ======================================================== ...

  7. springmvc+mybatis多数据源配置,AOP注解动态切换数据源

    springmvc与springboot没多大区别,springboot一个jar包配置几乎包含了所有springmvc,也不需要繁琐的xml配置,springmvc需要配置多种jar包,需要繁琐的x ...

  8. JAVA spring hibernate 多数据源配置记录

    数据源配置 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http:// ...

  9. 基于xml的Spring多数据源配置和使用

    上一篇讲了<基于注解的Spring多数据源配置和使用>,通过在类或者方法上添加@DataSource注解就可以指定某个数据源.这种方式的优点是控制粒度细,也更灵活. 但是当有些时候项目分模 ...

随机推荐

  1. 斯坦福CS231n—深度学习与计算机视觉----学习笔记 课时14&&15

    课时14 卷积神经网络详解(上) CNN处理的是一些数据块,在这之间有很多层,一系列的层将输入数据变换为输出数据,所以完成操作的中间量不仅是NN时候讲的那些向量,而是立体结构,有宽,高和深度,在整个计 ...

  2. HDU4467:Graph(点的度数分块)

    传送门 题意 给出一张n个点m条边的无向图,点的颜色为0/1,每次有两种操作: 1.Asksum x y,查询两点颜色为x和y的边的权值之和 2.Change x,将x颜色取反 分析 最直接的做法是每 ...

  3. POJ1503

    大数+++++ #include<cstdio> #include<string.h> #include<iostream> #include<algorit ...

  4. python __builtins__ range类 (56)

    56.'range',  创建一个整数列表 class range(object) | range(stop) -> range object | range(start, stop[, ste ...

  5. 关于margin和padding取值为百分比和负值的总结

    以下是自己学习过程中的总结,直接上结论: 1.margin/padding取值为百分比: margin和padding四个方向上的取值为百分比都是参照父级元素的宽度来计算的. 2.margin取值为负 ...

  6. AppStore 审核拒绝原因记录

    此文仅记录审核app被拒绝的原因 1.未提供充值功能,app中出现vip或者会员图标文字 被拒 解决,隐藏或取消该图标或文字 2.第三方登录,需要跳转到第三方app登录 被拒 解决,审核时隐藏第三方登 ...

  7. the little schemer 笔记(10)

    第十章 What Is  the Value of All of This? entry条目 是由list表组成的 pair 对,pair 对的第一个list表是集合 set.另外,两个list表的长 ...

  8. jquery $.trim()方法的介绍

    http://www.jb51.net/article/50282.htm

  9. iOS中数据类型转换--遇到则记录

    1.NSString转NSNumber 使用情景:CoreData存储数据,其中一个为价格,CoreData里面定义为float 用文本输入框得到的数据类型是NSString,将NSString转换成 ...

  10. 今天发现一个汉字转换成拼音的模块,记录一下,直接pip install xpinyin即可

    http://blog.csdn.net/qq_33232071/article/details/50915760