使用的方法里,可以在项目中直接配置XML,也可以在Tomcat下配置,这里只介绍在项目中配置的方法:
1.
找到META-INF,在文件夹下新建context.xml,在里面输入<?xml version="1.0" encoding="UTF-8"?>
<Context reloadable="true">
<Resource name="jdbc/XXX"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/***"
username="你的数据库用户名"
password="你的数据库密码"
maxActive="50"
maxIdle="20"
maxWait="10000" />
</Context>
说明:
name,数据源名称,通常取”jdbc/XXX”的格式;
type,”javax.sql.DataSource”; url,连接数据库URL,***位置为数据库名
username,数据库用户名
password,数据库用户密码;
driveClassName,数据库驱动;
maxIdle,最大空闲数,数据库连接的最大空闲时间。超过空闲时间,数据库连接将被标记为不可用,然后被释放。设为0表示无限制。
MaxActive,连接池的最大数据库连接数。设为0 表示无限制。
maxWait ,最大建立连接等待时间。如果超过此时间将接到异常。设为-1 表示无限制。
属性说明:
数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。数据库连接池的最小连接数和最大连接数的设置要考虑到下列几个因素:
1) 最小连接数是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费;
2) 最大连接数是连接池能申请的最大连接数,如果数据库连接请求超过此数,后面的数据库连接请求将被加入到等待队列中,这会影响之后的数据库操作。
3) 如果最小连接数与最大连接数相差太大,那么最先的连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接。不过,这些大于最小连接数的数据库连接在使用完不会马上被释放,它将被放到连接池中等待重复使用或是空闲超时后被释放。
resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/XXX</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
说明:
description,描述信息;
res-ref-name,指定数据源的JNDI名字,同上一步context.xml中的的属性name;
res-type,资源类型,”javax.sql.DataSource”,与上一步context.xml中的的属性type相同;
res-auth,”Container”;
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 DBPool {
private static DataSource pool;
static {
Context initContext;
try {
/
initContext = new InitialContext();
pool = (DataSource)initContext.lookup("java:comp/env/jdbc/XXX");
/
if(pool==null)
System.err.println("/"DBPool/" is an unknown DataSource");
} catch(NamingException ne) {
ne.printStackTrace();
}
}
public static DataSource getPool() {
return pool;
}
public static Connection getConnection(){
Connection conn;
try {
conn = pool.getConnection();
} catch (SQLException e) {
e.printStackTrace();
return null;
}
return conn;
}
}
//中间的部分为关键代码,在获得DataSource数据之后,使用Connection conn = DBPool.getConnection();//获得数据库连接
来获得数据库连接。之后的就和平时一样了。
4. 如果应用直接通过JDBC API访问数据库,那么可以把JDBC驱动器类复制到 应用名/WEB-INF/lib 目录或者<CATALINA_HOME>/lib 目录下;如果应用通过数据源连接数据库,由于数据源有Servlet容器创建并维护,因此必须把JDBC驱动器类复制到 <CATALINA_HOME>/lib 目录下,从而确保Servlet容器能够访问到驱动器类库。
我用的是MyEclipse 8.5,为了方便使用了自带的Tomcat。可以到MyEclipse安装目录下搜索 tomcat ,自己分辨便是了;而MyEclipse 8.5的 <CATALINA_HOME>/lib 是:
/Genuitec/Common/plugins/com.genuitec.eclipse.easie.tomcat.myeclipse_8.5.0.me201003121946/tomcat/lib