数据库连接是一种关键的有限的昂贵的资源,这在多用户网页应用程序中体现的尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标,数据库连接池正是针对这个问题提出的
数据库连接池负责分配,管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏,这样可以明显提高对数据库操作的性能
数据库连接池在初始化的时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是又最小数据库连接数来设定的,无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中.
数据库连接池的最小连接数和最大连接数的设置要考虑到下列几个因素:
1.最小连接数是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费.
2.最大连接数是连接池申请的最大连接数,如果数据库连接请求超过次数,后面的数据库连接请求将被加入到等待对了中,这回影响之后的数据库操作
如果最小连接数与最大连接数相差太大,那么最先的连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接,不过,这些小于最小连接数的数据库连接在使用完不会马上被释放,它将被放到连接池中等待重复使用或是空闲超时被释放.
第一步:配置数据源(content.xml)
配置好之后,该文件应该放在META-INF下面
<?xml version="1.0" encoding="UTF-8"?>
<Context>
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<Resource
name = "jdbc/sqlserver"
author = "Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="test"
password="test"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://127.0.0.1:1433; DatabaseName=databasename" />
<Resource name="jdbc/mysqlds"
auth="Container"
type="javax.sql.DataSource"
username="root"
password="kyf19940225"
maxIdle="30"
maxWait="10000"
maxActive="100"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/mysql" />
</Context>
第二步:引入数据源(web.xml)
该代码块,应放在远web.xml文件中<web-app></web-app>
内部
<resource-ref>
<description>DB Connection</description>
<!-- 参考数据源名字,同Tomcat中配置的Resource节点中name属性值"jdbc/sqlserver"一致 -->
<res-ref-name>jdbc/sqlserver</res-ref-name>
<!-- 资源类型 -->
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
<resource-ref>
<description>DB Connection</description>
<!-- 参考数据源名字,同Tomcat中配置的Resource节点中name属性值"jdbc/sqlserver"一致 -->
<res-ref-name>jdbc/mysqlds</res-ref-name>
<!-- 资源类型 -->
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
完成上述两步,基本就配置完了,当然使用数据库肯定不能缺少驱动,记得下载你要引入的对应驱动放在WEB-INF/lib目录中哦
sqlserver和mysql驱动下载地址
最后一步:测试
<%@ page language="java" pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>
<%@ page import="java.sql.*" %>
<%@ page import="javax.naming.*" %>
<%@ page import="javax.sql.DataSource" %>
<html>
<head>
<title>Tomcat9.0 JNDI!</title>
</head>
<body>
Tomcat连接池测试,获取数据源 <br>
<%
try {
//初始化查找命名空间
Context ctx = new InitialContext();
//参数java:/comp/env为固定路径
Context envContext = (Context)ctx.lookup("java:/comp/env");
//参数jdbc/sqlserver为数据源和JNDI绑定的名字
DataSource ds = (DataSource)envContext.lookup("jdbc/sqlserver");
Connection conn = ds.getConnection();
conn.close();
out.println("<span style='color:red;'>连接池测试成功<span>");
} catch (NamingException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
%>
</body>
</html>
当你的页面成功输出连接池测试成功,那么就恭喜你,配置ok了