Java Web使用数据库连接池

本文介绍了在Tomcat服务器中配置Java Web应用程序与数据库连接池的方法,包括在context.xml和web.xml文件中的配置步骤,以及如何在项目中通过连接池获取数据库连接对象。提供了两种不同的配置方式,一种涉及服务器和项目的配置文件,另一种仅在项目内部配置context.xml文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这里使用的Web服务器是Tomcat服务器

方法一、

1.1  配置context.xml文件

context.xml文件路径: D:\Tomcat 7\conf\context.xml        路径是参考,根据实际情况寻找context.xml

在<Context>节点下添加<Resource>标签元素

<Context>
	<Resource name="jdbc/news" auth="Container" type="javax.sql.DataSource"
	maxActive="100" maxIdle="30" maxWait="10000" username="root"
	password="123" driverClassName="com.mysql.cj.jdbc.Driver"
	url="jdbc:mysql://127.0.0.1:3306/newsmanagersystem?
	useUnicode=true&amp;characterEncoding=utf-8"/>
</Context>

Resource元素属性,属性名不能自定义,不要打错

属性说明
nameResource的JNDI名字
auth

指定管理Resource的Manager,有两个可选值:Container和Application。

Container:表示有容器创建Resource 。Application:表示有Web应用创建和管理Resource

type指定Resource的Java类型
maxActive连接池最大连接对象数量
maxIdle连接池初始的连接对象数量
maxWait超出初始连接数量后的连接处于空闲状态的时间(时间过后如果还处于空闲状态被对象关闭)
username数据库用户名
password数据库密码
driverClassName指定数据库的JDBC驱动程序
url指定数据库的连接地址(127.0.0.1:3306是回环地址)

 

1.1  配置web.xml文件

web.xml文件的路径:WebRoot/WEB-INF/web.xml        路径是相对路径,相对Web项目

在<web-app>节点下添加<resource-ref>标签元素

<web-app>   
  <resource-ref>
  		<description>news DataSource</description>
  		<res-ref-name>jdbc/news</res-ref-name>
  		<res-type>javax.sql.DataSource</res-type>
  		<res-auth>Container</res-auth>
  </resource-ref>
</web-app>
属性说明
description对所引用资源的说明
res-ref-name指定所引用资源的JNDI名字,与<Resource>标签中的name属性对应
res-type指定所引用资源的类型,与<Resource>标签中的type属性对应
res-auth指定所引用资源的Manager,与<Resource>标签中的auth属性对应

 

方法二、

2.1 创建并配置context.xml文件

声明:这个方法不需要配置Tomcat服务器中的context.xml文件,也不需要配置Web项目中的web.xml文件

只需要在需要使用数据库连接池的Web项目中WebRoot目录下的META-INF目录中创建一个context.xml文件,添加<Context>节点,然后在节点中添加<Resource>节点以及其内容即可!(内容参照1.1配置context.xml文件)

 

在项目中从数据库连接池中获取数据库连接对象

此处不做过多解释,有疑问看代码中的注释

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
/**
 * 定义数据库工具类型
 * 实现方法:
 * 1.获取数据库连接对象
 * 2.关闭数据库对象的方法
 * @return
 */
public class DatabaseUtil {
	//定义getConnection()方法	即一个获取数据库连接对象的方法
	public static Connection getConnection() {
		//创建Context,DataSource,Connection的对象,但不实例化,方面后期实例化使用
		//javax.naming包下的Context,这里声明其对象主要用其方法读取配置中的数据库池
		Context ctx = null;
		//javax.sql包下的DataSource,主要用于接收Context方法读取到的数据库连接池
		DataSource ds = null;
		//数据库连接对象,主要用于从DataSource中获取到一个数据库连接对象
		Connection conn = null;
		try {
			//通过InitialContext()方法获取Context对象的实例
			ctx = new InitialContext();
			//通过Context的lookup()方法读取到连接池并强转成DataSource类型
			//(DataSource)用于强转类型
			//lookup方法中的写法:("java:comp/env/"+name属性值)		java:comp/env/是固定路径写法		后面跟配置文件中的name属性值
			 ds = (DataSource) ctx.lookup("java:comp/env/jdbc/news");
			 //使用.getConnection()方法从数据库中获取一个连接对象
			 conn = ds.getConnection();
		} catch (NamingException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		} catch (SQLException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
		//返回已经获得到的数据库连接对象,实现方法最终目的
		return conn;
	}
	
	//关闭对象方法,和本文章无关,不多做解释
	public static void closeAll(Connection conn,PreparedStatement pdst,ResultSet rest) {
		try {
			if(rest!=null) {
				rest.close();
			}
			if(pdst!=null) {
				pdst.close();
			}
			if(conn!=null) {
				conn.close();
			}
		} catch (SQLException e) {
			// TODO 自动生成的 catch 块
			e.printStackTrace();
		}
	}
}

 

文章中如果有错误地方请留言或私信提示,文章写的有些许仓促,恐有错误的地方,请及时提示,一面误人子弟

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吾欲乘风归去,又恐琼楼玉宇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值