配置数据库连接池
基于 HTTP 协议的 Java Web 程序是无状态的,因此在应用程序中使用 JDBC 时,每次处理客户端请求时都会重新建立数据库连接。如果客户端的请求非常频繁,服务器端在处理数据库时将会消耗非常多的资源,因此在 Tomcat 中提供了数据库连接池技术。数据库连接池负责分配,管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个数据库连接。在使用完一个数据库连接后,将其归还数据库连接池,以备其他程序使用。
在 Tomcat 中配置数据库连接池有两种方法。
1.配置全局数据库连接池
(1)打开<Tomcat 安装目录>/conf/server.xml 文件,并从中找到<GlobalNamingResources>元素,然后加入一个子元素<Resources>,这个子元素的配置代码如下(以mysql数据库为例):
<Resources name="jdbc/mydb" auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mydb?characterEncoding=UTF8"
username="root"
password="1234"
maxActive="300"
maxIdle="50"
maxWait="5000"/>
上面的配置代码中有几个和数据库连接池性能有关的属性的说明。
◆ maxActive:连接池可以存储的最大连接数,也就是应用程序可以同时获得的最大连接数。这个属性值一般根据 Web 程序的最大访问量来设置。
◆ maxIdle:最大空闲连接数。当应用程序使用完一个数据库连接后,如果连接池中存储的连接数小于maxIdle,那么这个数据库并不马上释放,而是仍然存储在连接池中,以备其他程序使用。这个属性值一般根据 Web 程序的平均访问量来设置。
◆ maxWait:暂时无法获得数据库连接的等待时间(单位:ms)。如果 Web 程序从数据库连接池中获得的数据库连接数已经等于maxActive,而且都还没有归还给连接池,这是再有持续向获得数据库连接,就会等待maxWait 所指定的时间。如果超过 maxWait 所指定的时间还无法获得数据库连接,就会抛出异常。
(2)在<Tomcat 安装目录>/conf/Catalina/localhost 中建立一个 demo.xml 文件(文件名要和 path 属性值一致),然后输入如下内容:
<Context path=”/demo” docBase=”demo” debug=” 0” >
<Resource name=”jdbc/mydb” glonal=”jdbc/mydb” type=”javax.sql.DataSource”/>
</Context>
2.配置局部数据库连接池
在<Tomcat 安装目录>/conf/Catalina/localhost 中建立一个demo.xml 文件,然后输入如下内容:
<Context path=”/demo” docBase=”demo” debug=” 0” >
<Resources name="jdbc/mydb" auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mydb?characterEncoding=UTF8"
username="root"
password="1234"
maxActive="300"
maxIdle="50"
maxWait="5000"/>
</Context>
配置完数据库连接池后,可以在Servlet 的service 方法或其他处理HTTP 请求的方法中使用如下代码来连接数据库:
Javax.naming.Context ctx = new javax.naming.InitialContext();
//获取DataSource对象
Javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup(“java:/comp/env/jdbc/mydb”);
Connection conn = ds.getConnection(); //获得Conection 对象
获得Connection 对象后的操作就和不使用数据库连接池操作数据库时一样的了。