学习要点

  • 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. 6-8 adaboost分类器2

    重点分析了Adaboost它的分类结构,以及如何使用Adaboost.这一节课讲解Adaboost分类器它训练的步骤以及训练好之后的XML文件的文件结构.所以这节课的核心是Adaboost分类器它的训 ...

  2. mysql5.7 异常ERROR 1055 (42000)

    大致错误如:ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and contains nonagg ...

  3. J20170426-hm

    ジェネリクス Generics 泛型 バルーン balloon 气球 アングルブラケット Angle bracket 尖括号 プレースホルダ Placeholder 占位符

  4. FZU2277 Change(dfs序+树状数组)

    传送门 题意 q次操作,操作有两种: 1 v x k:a[v]+=x,a[v']+=x-k(v'是v的子节点)... 2 v:查询\(a[v]mod(10^9+7)\) 分析 子节点增加的值为\(x+ ...

  5. lightoj1169【DP】

    题意(来自大哥): 有两栋楼,左边一栋,右边一栋,层数从1-n,地面的标号为0,每一层有一个水果.有一只猴子在地面上,他现在要上到n层去,在第i层会吃掉水果花费一定时间. 猴子有两种方式从第i层到i+ ...

  6. lightoj1231【背包】

    题意: 有n种货币,已知每种货币的价值和数量. 给出一个k,问最多能组成k的方法.这个数量很大,需要mod 1e8+7. 思路: 额....这一题和上一篇的差不多,直接传送门: (此题很棒) 这里的话 ...

  7. weui button的使用

    1.迷你按钮的使用 <a href="javascript:;" class="weui-btn weui-btn_primary weui-btn_mini&qu ...

  8. JAVA多线程(四) Executor并发框架向RabbitMQ推送消息

    github代码地址: https://github.com/showkawa/springBoot_2017/tree/master/spb-demo/spb-brian-query-service ...

  9. 第十六篇 .NET高级技术之序列化

    .net framework的类库中提供了三个可以用于序列化和反序列化的类,分别为BinaryFormatter.SoapFormatter和XmlSerializer. BinaryFormatte ...

  10. 洛谷P2502[HAOI2006]旅行

    题目: Z小镇是一个景色宜人的地方,吸引来自各地的观光客来此旅游观光.Z小镇附近共有N个景点(编号为1,2,3,-,N),这些景点被M条道路连接着,所有道路都是双向的,两个景点之间可能有多条道路.也许 ...