JNDI
【前言】:当创建的连接不够用时,我们该如何处理呢?所以引入了数据库连接池。连接池是由容器提供的,用来管理池中连接对象。其实数据库连接池有点像之前学的线程池,先将一些连接放入连接池中,用的时候取出来,不用的时候放回去,没有空闲的连接时,只能等待其他释放。
JNDI—(Java Naming and Directory Interface)Java命名和目录接口
JNDI 提供了一种统一的方式,可以用在网络上查找和访问服务。通过指定一个资源名称,该名称对应于数据库或命名服务中的一个记录,同时返回数据库连接建立所必须的信息
具体步骤如下:
一、配置好Tomcat
1、配置/tomcat/conf/context.xml文件,用于设置数据库的连接池信息
<!-- 注意这些只是字段名详解,不用加
JNDI数据源配置
J2EE服务器上保存着一个数据库的多个连接(连接池中),
数据源被绑定在了JNDI树上,
每一个DataSource都有一个name,
客户端通过name找到在JNDI树上绑定的DataSource,
再由DataSource找到一个连接
name:表示以后要查找的名称。通过此名称可以找到DataSource,此名称任意更换,但是程序中最终要查找的就是此名称,
auth:由容器进行授权及管理,指的用户名和密码是否可以在容器上生效,可以使用Container
type:此名称所代表的类型,现在为javax.sql.DataSource(不用变)
maxActive:表示一个数据库在此服务器上所能打开的最大连接数
maxIdle:表示一个数据库在此服务器上维持的最小连接数
maxWait:最大等待时间。10000毫秒
username:数据库连接的用户名
password:数据库连接的密码
driverClassName:数据库连接的驱动程序
url:数据库连接的地址
-->
添加如下代码
2、idea配置Tomcat
具体操作可以看我之前的博客
【注意:别忘记导入Tomcat和驱动Jar包】
dao层
package dao;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;
/**
* @Author shall潇
* @Date 2021/3/8
* @Description 使用数据源
*/
public class ResultDao {
public static Connection conn;
public void getConn(){
try {
Context ctx = new InitialContext();
Context context = (Context) ctx.lookup("java:comp/env");
DataSource ds = (DataSource) context.lookup("res"); //这个要和配置文件中起的名字一样
conn = ds.getConnection();
System.out.println(conn);
} catch (NamingException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
index.jsp
<%@ page import="dao.ResultDao" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>JNDI</title>
</head>
<body>
<%
//JNDI
ResultDao rd = new ResultDao();
rd.getConn();
out.print(rd.conn);
%>
</body>
</html>
运行结果