JavaEE-04 数据源配置
学习要点
- 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便于调试。
数据库连接池
- 定义
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新创建一个;释放空闲时间超过做大空闲时间的数据库连接,以避免没有释放数据库连接而引起的数据库连接遗漏。
- 连接池管理连接
- 数据库连接池的基本思想就是为数据库连接建立一个“空闲池”。预先在空闲池中放入一定数量的连接。
- 当需要建立数据库连接时,系统检查空闲池中是有有连接,如果有,则从“空闲池”中取出一个。如果没有,则判断是否已经达到连接池所允许的最大连接数,若没有达到最大连接数,则新建一个连接返回;如果已经达到最大连接数,则继续等待,直到有空闲连接;如果超过预定等待时间,则返回一个NULL连接。
- 应用程序使用完连接,放回连接池。
- 我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量﹑使用情况,为系统开发﹑测试及性能调整提供依据。
数据源
- javax.sql.DataSource用来负责建立与数据库的连接,他是用来描述现实存在的数据源,配置好的数据库连接池就是以数据源的形式存在的。
- 数据源(DataSource)
- 从Tomcat的数据源获得连接
- 把连接返回给连接池
- 数据源的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();
上机练习
需求描述
修改新闻发布系统的数据库连接,使用连接池技术。
实现思路
- 配置/tomcat安装目录/conf/context.xml文件(或者在项目META-INFO中添加context.xml文件)
- 配置/webRoot/WEB-INF/web.xml文件
- 在lib目录中添加数据库驱动jar文件
- 在BaseDao中获取数据连接方法中编写代码,实现查找数据源
JavaEE-04 数据源配置的更多相关文章
- JNDI数据源配置
一.数据源的由来 在Java开发中,使用JDBC操作数据库的四个步骤如下: ①加载数据库驱动程序(Class.forName("数据库驱动类");) ②连接数据库(Connec ...
- 沉淀,再出发——在Ubuntu Kylin15.04中配置Hadoop单机/伪分布式系统经验分享
在Ubuntu Kylin15.04中配置Hadoop单机/伪分布式系统经验分享 一.工作准备 首先,明确工作的重心,在Ubuntu Kylin15.04中配置Hadoop集群,这里我是用的双系统中的 ...
- Tomcat数据源配置方法总结
最近接触的数据表管理项目,涉及到了数据源配置,所以整理了一下配置方法: JNDI数据源统一都是在Tomcat下server.xml中配置的,根据应用范围的差别又分为一下几种方式: 第一种:配置单个应用 ...
- Tomcat 6 部署工程总结,使用JNDI数据源配置
工程需要用JNDI数据源方式部署到tomcat,参考网上文章后,经过配置测试,摸索出来了. 环境说明: 数据库:Oracle9i Web服务器:tomcat-6.0.33 tomcat启动方式 ...
- spring 4 + jpa(hibernate 3/4) + spring mvc 多数据源配置
先从persistence.xml开始: <?xml version=”1.0″ encoding=”UTF-8″?><persistence version=”2.1″ xmlns ...
- 【spring boot】12.spring boot对多种不同类型数据库,多数据源配置使用
2天时间,终于把spring boot下配置连接多种不同类型数据库,配置多数据源实现! ======================================================== ...
- springmvc+mybatis多数据源配置,AOP注解动态切换数据源
springmvc与springboot没多大区别,springboot一个jar包配置几乎包含了所有springmvc,也不需要繁琐的xml配置,springmvc需要配置多种jar包,需要繁琐的x ...
- JAVA spring hibernate 多数据源配置记录
数据源配置 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http:// ...
- 基于xml的Spring多数据源配置和使用
上一篇讲了<基于注解的Spring多数据源配置和使用>,通过在类或者方法上添加@DataSource注解就可以指定某个数据源.这种方式的优点是控制粒度细,也更灵活. 但是当有些时候项目分模 ...
随机推荐
- View Controller Programming Guide for iOS---(七)---Resizing the View Controller’s Views
Resizing the View Controller’s Views A view controller owns its own view and manages the view’s cont ...
- ASP.NET Core MVC 2.x 全面教程_ASP.NET Core MVC 15. 用户管理
源码的github的地址 https://github.com/solenovex/ASP.NET-Core-MVC-Tutorial-Code 语雀上的人的地址: https://github.co ...
- Luogu P1262 间谍网络 【强连通分量/缩点】By cellur925
题目传送门 真是一道好题呀~~~~qwq 知道这题是tarjan,但是想了很久怎么用上强连通分量.因为样例们...它显然并不是一个强联通分量! (被样例迷惑的最好例子) 然后...就没有然后了...感 ...
- jQuery笔记之工具方法extend插件扩展
jQuery工具方法 $.extend()插件扩展(工具方法) $.fn.extend()插件扩展(实例方法) 浅度克隆.深度克隆 两个方法基本是一样的,唯一不同的就是调用方式不一样 -------- ...
- SQL 实战语句(9)
1.如何同步根据部门表同步另外一个项目表的部门字段 update A set A.auditownerid=(select lp.epleaderId from (select ep.userid a ...
- websocket来回收发消息
# server- # pip install geventwebsocket# pip install flask from flask import Flask, render_template, ...
- python_8(模块)
第1章 模块 1.1 概述 1.2 模块的分类 1.2.1 内置模块 1.2.2 扩展模块 1.2.3 模块安装 1.2.4 自定义模块第2章 模块之内置模块 2.1 collections模块 2. ...
- memcache的分布式配置
public static class MemcacheHelper { private static MemcachedClient mc; static MemcacheHelper() { St ...
- WPF学习12:基于MVVM Light 制作图形编辑工具(3)
本文是WPF学习11:基于MVVM Light 制作图形编辑工具(2)的后续 这一次的目标是完成 两个任务. 本节完成后的效果: 本文分为三个部分: 1.对之前代码不合理的地方重新设计. 2.图形可选 ...
- 使用原生javascript实现jquery的$(function(){ })
在使用jquery的时候,经常用到$(function(){})方法或者是$(document).read(function(){})来作为页面dom节点加载完成之后javascript的执行入口,现 ...