如何提升MySQL批量插入的效率
JDBC使用预编译SQL的好处

Tomcat 5.5 配置数据库连接池

Jimmy posted @ 2012年3月16日 14:50 in JSP+MySQL , 1707 阅读

今天下定决心解决数据库连接池问题,因为访问数据库总是要考虑连接如何分配,如果忘记释放很多连接或造成程序性能的下降,还是把这些问题都交给数据库连接池来解决吧。

首先,每一次Web请求都要建立一次数据库连接。建立连接是一个费时的活动,每次都得花费0.05s~1s的时间,而且系统还要分配内存资源。这个时间对于一次或几次数据库操作,或许感觉不出系统有多大的开销。可是对于现在的Web应用,尤其是大型电子商务网站,同时有几百人甚至几千人在线是很正常的事。在这种情况下,频繁的进行数据库连接操作势必占用很多的系统资源,网站的响应速度必定下降,严重的甚至会造成服务器的崩溃。不是危言耸听,这就是制约某些电子商务网站发展的技术瓶颈问题。其次,对于每一次数据库连接,使用完后都得断开。否则,如果程序出现异常而未能关闭,将会导致数据库系统中的内存泄漏,最终将不得不重启数据库。还有,这种开发不能控制被创建的连接对象数,系统资源会被毫无顾及的分配出去,如连接过多,也可能导致内存泄漏,服务器崩溃。
 
由上面的分析可以看出,问题的根源就在于对数据库连接资源的低效管理。
 
对于共享资源,有一个很著名的设计模式:资源池(Resource Pool)。该模式正是为了解决资源的频繁分配、释放所造成的问题。为解决上述问题,可以采用数据库连接池技术。数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量、使用情况,为系统开发、测试及性能调整提供依据。

1. 使用Tomcat 5.5版本,首先安装Admin组件(可以在浏览器中以图形化界面配置Tomcat)

可以参考http://book.51cto.com/art/200908/148435.htm

2. 配置数据库连接池

2.1 配置JNDI

启动Tomcat,打开Firefox在地址栏内输入http://localhost:8080/admin 进入Tomcat的管理界面,点击右边的Data Sources 在右上角的下拉菜单中选择Create New Data Source 在下边的输入框中输入需要的配置信息。之后保存并提交。

  • JNDI Name:jdbc/Pool4User                              //(Pool4User自己命名)
  • Data Source URL:jdbc:mysql://localhost:3306/user     //(user为要连接的数据库名)
  • JDBC Driver Class: com.mysql.jdbc.Driver
  • User Name:root                                        //根据你的MySQL数据库的用户名密码
  • Password:                                             //数据库密码
  • Max. Active Connections: 20                           //最大连接数
  • Max. Idle Connections: 5                              //最大的空闲连接数
  • Max. Wait for Connection:5000                         //最大等待连接时间
2.2 配置tomcat添加JDBC驱动
首先要下载安装驱动,然后将mysql-connector-java-xxx-bin.jar文件放到Tomcat安装路下的common/lib下
 
2.3 配置tomcat安装路下的/conf/context.xml文件,添加如下内容:
<Resource name="jdbc/Pool4User" 
                auth="Container" 
                type="javax.sql.DataSource" 
                driverClassName="com.mysql.jdbc.Driver" 
                url="jdbc:mysql://localhost:3306/user"
                username="root" 
                password="" 
                maxActive="20" 
                maxIdle="5" 
                maxWait="5000" />
 
3. 编写测试程序(JSP文件)
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ page import="java.sql.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="javax.naming.*"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Connection Pool Testing</title>
</head>
<body>
Tomcat Connection Pool Testing
<br>
<%
Connection connection = null;
Context iniCtx = new InitialContext();
Context ctx = (Context)iniCtx.lookup("java:comp/env");

javax.sql.DataSource ds = (javax.sql.DataSource)ctx.lookup("jdbc/Pool4User");
connection = ds.getConnection();

String sqlString = "select * from account";
PreparedStatement pstmt = connection.prepareStatement(sqlString);
ResultSet rs = pstmt.executeQuery();

out.print("<table>");
while(rs.next())
{
	out.print("<tr>");
		out.print("<td>" + rs.getString(1) + "</td>");
		out.print("<td>" + rs.getString(2) + "</td>");
	out.print("</tr>");
}
out.print("</table>");

rs.close();
pstmt.close();
connection.close();

out.print("test success!");
 %>
 
</body>
</html>
 
至此数据库连接池配置完毕!

 


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter