1.理解JNDI
1.1 JNDI全称:Java Naming and Directory Interface,Java命名和目录接口。
- JNDI:是一个有关应用序设计的 API 为开发人员提供了查找和访问各种命名和目录服务的通用、 统一的接口;
- 作用:通过名称将资源与服务进行关联。
1.2 JNDI的作用与优点
-
在应用与Java对象或资源之间建立松耦合的逻辑关联,简化应用对于资源的配置及维护工作;
-
可以在更大范围、不同应用之间共享资源;
JNDI 简单地理解为是一种将对象和名字绑定的技术,即指定一个资源名称,将该称与某一资源或服务相关联,当需要访问其他组件和资源时,就需要使用 JNDI 服务进行定位. 应程序可以通过名字获取对应的对象或服务;
1.3 用法
- 在 Tomcat 中发布一条信息供所有的 Web 应用程序使用;
分析:Tomcat 根目录\conf\context.xml 文件为全局的上下文配置文件,所有的 Web 应用有效。所将要发布的信息配置在此文件中,再通过 JNDI 来查找信息;
1. 在 Tomcat 中发布一条信息,修改context . xml 文件,代码如下:
```
<Context>
<Environment name="tjndi" value="hello JNDI" type="java.lang.String" />
</Context>
```
>< EnviTonment >元素用于配置命名的值, 所配置的值作为环境条目资源, 对整个 Web 应用可见。它包含的属性:name、type、value;
-
name:环境条目的名称,相对于 java:comp/env 的名称;
-
type: 环境条目的 Java 类名的全称;
-
value: 通过JNDI context 请求时,返回给应用的参数值,该值必须转换成 type 属性定义Java 类型;
2. 编写 JSP 代码 , 通过 JNDI 访问环境条目,代码如下:
<body>
<%@ page import="javax.naming.*" %>
<%
//javax.naming.Context提供了查找JNDI Resource的接口
Context ctx = new InitialContext(); //初始化Context对象
//java:comp/env/为前缀
String testjndi = (String) ctx.lookup("java:comp/env/tjndi"); //调用lookup()方法
out.print("test jndi:" + testjndi);
%>
</body>
- java. naming包下的Context 接口表示命名上下文,它由一组名称到对象的绑定组成。
- InitialContext是 Context接口的实现类;
- Object lookup(String name) 方法根据名称检索指定对象,
- 为了避免 JNDI命名空间中的资源名称互相冲突. 并且避免可移植性问题 Java EE 应用程序中的所有名称应该以字串“java:comp/env”作为前缀;在上面的示例中:前缀后面的 'tjndi " 则对应着 context. xml 文件中< EnviTonment >元素的 name 属性;
使用JNDI的步骤
-
配置资源;
-
通过 Context 的 lookup()方法查找资源;
使用application 应该也能满足上述需求,但是 application 对象只能个 Web 应用程序中使用;使用 JNDI 发布的信息是对服务器上所有的 Web 应用程序都可见的,JNDI不只完成这种简单的需求,它还提供了对其他资源的引用;
2.数据库连接池
2.1 连接池(Connection Pool)
数据库连接池(Connection pooling)是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放。
2.2 数据库连接池:数据库连接池负责分配、管理和释放数据库连接;
-
它允许应用程序重复使用一个现有的数据连接,而不再是重新建立一个;
-
释放那些空闲时间超过最大空闲时间的数据库连接,以避免由于有释放数据库连接而引起的数据库连接泄露;
-
明显提高数据库的操作性能
2.3 连接池原理
数据库连接池在初始化时将创建一定数量的数椐库连并放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接否被使用,连接池都将确保至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求被加入等待队列中;
2.4 连接池是如何管理连接的?
对于连接的管理可使用空闲池,即把巳经创建但尚未分配出去的连接存放到一个空闲池中;每当用户请求一个连接时,系统首先检查空闲池内有没有空闲连接,如果有就分配一个连接给用户;如果没有则检查当前连接池是否达到连接池所允许的最大连接数。如果没有达到,就新建一个连接。如杲已经达到,就等待一定的间。如果在等待的时间内有连接被释放出来,就可以把这个连接分配给等待的用户;如果等待时间超过预定时间,则返回空值 (null),系统对已经分配出去正在使用的连接只做计数,当使用完后再返还给空闲池;
2.5 数据库连接池技术带来的优势
- 资源重用
- 更快的系统响应速度
- 据库连接初始化和释放过程的时间开销,从而缩减了系统整体响应时间。
- 统一的连接管理,避免数据库连接泄漏