JNDI配置

1. JNDI配置

第一步需要导入数据库连接需要用到的jar包。

1.1 web.xml配置

在java web项目中的WEB-INF目录下的web.xml中添加数据库资源的引用。

<!-- 配置连接池JNDI的引用 -->
	<resource-ref>
		<description>MySQL DataBase Connection</description>
		<res-ref-name>jdbc/mysql</res-ref-name><!-- name应于context.xml中引用的名字相同 -->
		<res-type>javax.sql.DataSource</res-type>
		<res-auth>Container</res-auth>
	</resource-ref>

1.2 context.xml配置

在java web项目中的META-INF目录下的context.xml中添加数据库配置资源,如果没有context.xml文件可以自行创建并添加。在tomcat运行时会自动的将项目下的该文件配置信息加载到服务器的contex.xml文件中,所以不需要像网上说的那样都配置。

<?xml version="1.0" encoding="UTF-8"?>
<Context>

	<!-- 连接池属性配置 -->
	<!-- 
		name应于web.xml中引用的名字相同,maxTotal是最大连接人数
		maxIdle最大等待人数,maxWaitMillis最大的等待时间(以毫秒计算)
	-->
	<Resource name="jdbc/mysql" auth="Container"
		type="javax.sql.DataSource"
		driverClassName="com.mysql.cj.jdbc.Driver"
		url="jdbc:mysql://localhost:3306/test"
		username="root" password="root"
		maxTotal="10" maxIdle="4" maxWaitMillis="6000"/>
		
</Context>

1.3 连接池工具类

import java.sql.Connection;
import java.sql.SQLException;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

public class ConnectionPoolUtil {
	
	// 内容环境固定写法
	private static final String ENVIRONMENT = "java:comp/env/";
	// web.xml配置文件中数据库资源的名称,需要web.xml和context.xml都一致
	private static final String RESOURCE_NAME = "jdbc/mysql";
	private static DataSource dataSoruce = null;
	
	static {
		try {
			// 初始化上下文内容对象
			Context context = new InitialContext();
			// 在上下文内容对象中寻找内容环境和配置信息
			dataSoruce = (DataSource)context.lookup(ENVIRONMENT.concat(RESOURCE_NAME));
			// 关闭内容对象
			context.close();
		} catch (NamingException e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 获取数据库连接
	 * @return 数据库连接对象
	 */
	public static final Connection getConnection() {
		Connection connection = null;
		try {
			// 获取数据库连接
			connection = dataSoruce.getConnection();
		}catch (SQLException e) {
			e.printStackTrace();
		}
		return connection;
	}
	
}

2. JNDI测试

创建一个jsp文件,编写测试。连接池因为需要内容对象,所以只能通过服务器加载来进行测试。

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="javax.naming.*,javax.sql.*,java.sql.*,util.ConnectionPoolUtil"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
	Connection connection = ConnectionPoolUtil.getConnection();
	String sql = "select * from user";
	PreparedStatement preparedStatement;
	try {
		preparedStatement = connection.prepareStatement(sql);
		ResultSet resultSet = preparedStatement.executeQuery();
		int id;
		String name = null,sex = null;
		while(resultSet.next()) {
			id = resultSet.getInt("id");
			name = resultSet.getString("name");
			sex = resultSet.getString("sex");
			out.println("id:"+id+"name:"+name+"sex:"+sex+"<br>");
		}
		resultSet.close();
		preparedStatement.close();
		// 若想测试最大连接人数可以把下面这句注释掉,一直占用连接资源
		connection.close();
	} catch (SQLException e) {
		e.printStackTrace();
	}
%>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值