数据库连接池概述:
数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。
数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。数据库连接池的最小连接数和最大连接数的设置要考虑到下列几个因素:
1) 最小连接数是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费;
2) 最大连接数是连接池能申请的最大连接数,如果数据库连接请求超过此数,后面的数据库连接请求将被加入到等待队列中,这会影响之后的数据库操作。
3) 如果最小连接数与最大连接数相差太大,那么最先的连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接。不过,这些大于最小连接数的数据库连接在使用完不会马上被释放,它将被放到连接池中等待重复使用或是空闲超时后被释放。
把上面的精简了就是:
采用连接池就是为了减少系统每次为用户建立数据连接上的开销,同时达到一种复用,而这样做的代价是在系统初始化时候,预留一部分的连接数量(实际上和全局变量的概念差不多),当由请求时,所有的连接都是从这里提取而不是在去建立连接。
流程:连接-〉如果有连接-〉判断进行中的线程是否小于最大连结数---〉是---〉建立一个新连接的线程
-- -〉不是---〉等待一段时间---〉返回判断---〉重试次数超过限制---〉退出或者报错
-----------------------------------------------tomcat连接池------------------------------------
转载自:Func Real的blog
本指南将说明如何在自己安装的tomcat中配置好数据库连接池。并且本指南的配置方法不会手工改动任何.xml文件,毕竟那不是规范的方法,本人极力得不推荐。
首先安装tomcat,相信您的tomcat的版本不会低的还不支持数据库连接池。
安装tomcat的时候有很多人忽略了帐号密码的填写,就算写了也不知道在哪里用。其实这是用来登陆tomcat后台管理的帐号密码。可能很多人郁闷tomcat怎么没有友好的界面来设置呢,等下就告诉你在哪里。
装好tomcat后,启动tomcat。在地址栏输入:http://localhost:8080/ 回车,应该可以看到tomcat的欢迎界面了。本指南不是针对tomcat,其他详情请自己找吧。现在在地址栏输入:http://localhost:8080/admin 回车,应该可以看到他的登录界面了。如果你恰好有一个工程名叫做admin,那么,先把它删掉吧,最好连tomcat根目录中的work文件加一起删掉就应该可以了,实在不行就重新安装。
填上你刚才的帐号密码,登陆。别说你不是刚装的,早就忘了帐号密码了。最简单的方法,重新安装。如果你原来手工蹂躏过tomcat,那么一定舍不得重装,还有个办法,找到tomcat根目录/conf/tomcat-users.xml。打开,有一行看上去是这样的<user username="funcreal" password="123456" roles="admin,manager"/> ,你应该知道怎么回事了吧,funcreal就是帐号,123456就是密码。请不要抄袭我的帐号密码,否则会被人笑话的!登陆进tomcat的后台,按顺序点开TomcatService->Service->Host->你希望配置连接池的工程->Resources->Data Sources。好了,没意外的话,你应该在右侧看到了配置连接池的友好的界面。从下拉列表中选择:Create New Data Source。打开一个新的数据库连接池配置页。JNDI NAME:jdbc/mssql(mssql是自己起的,至于前面为什么是“jdbc/“这个样子得还没研究透彻),Data Source URL就是连接字符串,JDBC DRIVER CLASS就是驱动,帐号密码是自己的数据库的帐号密码,其余的都默认就行了。最后一项可以不填。最后,save->commit changes。一切就是这么简单。而且,你按照手边的其他资料看一下,我们的那个server.xml文件很干净,并没有资料上说得修改什么烂七八糟的东西!下面开始测试,测试文件内容如下:
<%@ page contentType="text/html; charset=GBK" %>
<%@ page contentType="text/html; charset=GBK" %>
<%@ page import="java.sql.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="javax.naming.*"%>
<html>
<head>
</head>
<body>
<%
out.print("hellou");
DataSource ds = null;
try{
InitialContext ctx=new InitialContext();
ds=(DataSource)ctx.lookup("java:comp/env/jdbc/mssql");
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
String strSql = "select * from orders";//自行修改这一条语句。
ResultSet rs = stmt.executeQuery(strSql);
while(rs.next()){
out.print(rs.getString(1));
out.print(rs.getString(3));
}
}catch(Exception ex){
ex.printStackTrace();
}
%>
</body>
</html>
ps:这个要根据具体的数据库和驱动来确定。
我的是这样的:
data source url:jdbc:microsoft:sqlserver://172.168.0.66:1433;databaseName=test
其中172.168.0.66换成你的ip地址,1433不能改,databaseName换成你的
JDBC Driver Class:com.microsoft.jdbc.sqlserver.SQLServerDriver
你首先要保证你的工程中包含这个包才行。