JNDI与连接池
Posted 学士后35班
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JNDI与连接池相关的知识,希望对你有一定的参考价值。
什么是JNDI
JNDI(Java Naming and Directory Interface),Java命名和目录接口,其作用是通过名称将资源与服务进行关联
JNDI的作用与优点
在应用与Java对象或资源之间建立松耦合的逻辑关联,简化应用对于资源的配置及维护工作,可以在更大范围、不同应用之间共享资源
使用JNDI步骤
第一步:配置context.xml文件
打开Tomcat根目录\conf\context.xml文件,在<Context>标签中添加如下代码
<Environment name="tjndi" value="hello JNDI" type="java.lang.String"/>
示例说明
属性 |
说明 |
<Environment> |
用于配置命名的值,所配置的值作为环境条目资源,对整个Web应用可见 |
name |
环境条目的名称,相对于java:comp/env的名称 |
type |
环境条目的Java类名的全称 |
value |
通过JDNI context请求时,返回给应用的参数值,该值必须转换成type属性定义的Java类型 |
第二步:通过JNDI访问环境条目
<%@ page language="java" import="java.util.*,javax.naming.*" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>JNDI</title>
</head>
<body>
<%
// 初始化Context对象
Context ctx = new InitialContext();
// 获取tjndi的value值
String testjndi = (String)ctx.lookup("java:comp/env/tjndi");
// 将值输出到页面上
out.print("JNDI: " + testjndi);
%>
</body>
</html>
使用连接池实现数据库连接
第一步:配置context.xml文件
打开Tomcat根目录\conf\context.xml文件,在<Context>标签中添加如下代码
<Resource name="jdbc/news" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000" username="root"
password="root" driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/news?useUnicode=true&characterEncoding=utf-8" />
示例说明
属性 |
说明 |
name |
指定Resource的JNDI名称 |
auth |
指定管理Resource的Manager |
type |
指定Resource所属的Java类 |
maxActive |
指定连接池中处于活动状态的数据库连接的最大数目 |
maxIdle |
指定连接池中处于空闲状态的数据库连接的最大数目 |
maxWait |
指定连接池中的连接处于空闲的最长时间 |
username |
指定连接数据库的用户名 |
password |
指定连接数据库的指令 |
driverClassName |
指定连接数据库的JDBC驱动程序 |
url |
指定连接数据库的URL |
第二步:配置web.xml文件
打开应用根目录\WEB-INF\web.xml文件,在<web-app>标签中添加如下代码
<resource-ref>
<description>new DataSource</description>
<res-ref-name>jdbc/news</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
元素 |
说明 |
<description> |
对所引用资源的说明 |
<res-ref-name> |
指定JNDI的名字,与<Resource>元素中的name一致 |
<res-type> |
指定引用资源的类名,与<Resource>元素中的type一致 |
<res-auth> |
指定管理所引用资源的Manager,与<Resource>元素中的auth一致 |
第三步:添加数据库驱动文件
将数据库驱动的jar文件复制到Tomcat安装目录下的lib目录中
第四步:进行代码编写,查找并获取数据源
package Dao;
import java.sql.*;
import javax.naming.*;
import javax.sql.*;
/**
* 数据库实体类
*
* @author yacon
*
*/
public class DBDao {
private Connection conn;
public DBDao() {
try {
// 初始化Context对象
Context ctx = new InitialContext();
// 获取jdbc/news的数据源对象
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/news");
// 获取数据库连接对象
conn = ds.getConnection();
} catch (SQLException e) {
e.printStackTrace();
} catch (NamingException e) {
e.printStackTrace();
}
}
// 其它代码省略
}
注意:如果你配置的context.xml文件是应用目录下面的META-INF\context.xml,那么就不在需要配置应用目录下面的WEB-INF\web.xml文件
以上是关于JNDI与连接池的主要内容,如果未能解决你的问题,请参考以下文章