学习要点

  • 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. 语言学习系列-Scala连接数据库示例

    Scala语法 预装数据库Mysql,登录用户名密码为:root:root,建立数据库test1,建立数据表emp: package com.ccb.day1   import java.sql.Dr ...

  2. 037--pymysql和SQLAchemy

    一.pymysql操作 1.执行SQL #!/usr/bin/env python # -*- coding:utf-8 -*- import pymysql # 创建连接 conn = pymysq ...

  3. linux基于流的文件操作

    1 打开流的函数 FIEL * fopen(const char * restrict pathname,const char* restrict type) FILE *fdopen(int fil ...

  4. hexo博客实现多终端共享&webhook自动化部署

    摘要:好不容易搭建了hexo,还不满足.想要实现在小程序上也能访问博客,又不想再写一个后台.每次更新文章到服务器之后,希望能自动同步到网站上面.如果你有这样的需求,那么希望这篇文章能帮助到你. 我的配 ...

  5. Java简单高精度合集

    第一个Java的算法程序.记得可以使用Alt+'/'自动补全sysout和main之类的. BigInteger在java.math.BigInteger中. import java.math.Big ...

  6. hdoj3711【水】

    题意: 给你两个集合,对于每个B集合的元素,从A集合找一个数使得a^b的二进制的1个数最少. 思路: 直接搞= = #include <bits/stdc++.h> using names ...

  7. 每天一水poj1502【最短路】

    #include<iostream> #include<cstdio> #include<string.h> #include<algorithm> u ...

  8. P1226神经网络

    提交了7次,看了无数题解,要死啊~~~.(无限吐槽这道题...) 据说是Toposort,我其实也不是很清楚,反正BFS就可以过:写题之前先把题看懂: 根据公式,因为入度为零的点不会被传递,所以阈值是 ...

  9. 运行scrapyd报错

    转自:    https://blog.csdn.net/qq_29719097/article/details/89431234 web.Server Traceback (most recent ...

  10. Django Views and URLconfs

    碧玉妆成一树高,万条垂下绿丝绦. 不知细叶谁裁出,二月春风似剪刀. 原文尽在:http://djangobook.com/ 转载请注明出处:http://www.cnblogs.com/A-FM/p/ ...