Tomcat7和mysql連接池dbcp方式的配置方法和測試
一.設計測試用的數據庫
1.新建數據庫
create database testmysql;
2.新建一個用戶信息數據表
create table test(
username varchar(20) primary key,
password varchar(20));
3.給新表插入數據信息
insert into test values('keivn','123456');
二. 設計局部數據源和連接池
1.在webapps目錄中新建test目錄,然后在test中分別新建WEB-INF和META-INF目錄,在WEB-INF目錄
中新建classes和lib目錄,將mysql數據庫驅動文.jar放進lib目錄中
這里我使用的版本是mysql-connector-java-5.1.22-bin.jar
2.在META-INF目錄中新建context.xml文件,然后將下面內容復制,保存
<?xml version='1.0' encoding='utf-8'?>
<Context>
<Resource name="jdbc/mysql"
auth="Container"
driverClassName="com.mysql.jdbc.Driver"
type="javax.sql.DataSource"
url="jdbc:mysql://localhost:3306/testmysql"
username="root"
password="123456"
maxActive="100"
maxIdle="30"
maxWait="10000" />
</Context>
context.xml中的參數的解析如下:
name屬性是數據源名稱,通常采取jdbc/**.
type屬性是數據源方式。
driverClassName屬性是驅動程序名稱。
username,password,數據庫名稱和密碼
maxActive屬性是并發連接的最大數。設置為0則無限制。
maxWait屬性是等待連接的最大連接的時間。
maxIdle屬性是連接池中空閑的連接的個數。
上文中的設置的 maxActive="100"說明可以最大連接的個數為100個,再建立連接,則出現異常。
而maxIdle="30"說明當關閉數據庫時(不是真正的斷開連接,而是歸還連接池中)連接池中最大可以有空閑的連接數為30個。
若是再有建立連接,此時若連接池中沒有空閑的連接,但是又沒有達到maxActive并發的最大連接數,則在連接池中建立連接。
3.然后在WEB-INF中新建web.xml文件,然后將下面內容復制,保存
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0"
metadata-complete="true">
<display-name>test</display-name>
<welcome-file-list>
<welcome-file>test.jsp</welcome-file>
</welcome-file-list>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/mysql</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
4.完成后,重啟tomcat服務器。
三.編寫一個jsp頁面測試設置連接池,連接數據庫是否成功。
在test目錄中新建test.jsp文件,然后將下面內容復制,保存
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="java.sql.*, javax.sql.*, 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=UTF-8">
<title>test</title>
</head>
<body>
<%
Connection conn=null;
PreparedStatement stmt=null;
ResultSet rs=null;
String sql=null;
String username=null;
String alias=null;
String pwd=null;
String strMsg=null;
try{
Context cxt = new InitialContext();
DataSource ds = (DataSource)cxt.lookup("java:/comp/env/jdbc/mysql");
conn = ds.getConnection();
sql="select * from test";
stmt=conn.prepareStatement(sql);
rs=stmt.executeQuery();
if(rs.next()){
strMsg="連接ok";
out.println(rs.getString("username"));
out.println(rs.getString("password"));
out.println("連接ok");
}else{
out.println("rs.next() fail");
}
rs.close();
} catch(Exception e){
out.println("連接失敗:"+e.getMessage());
//e.printStackTrace();
}
try{
if(stmt!=null) stmt.close();
}catch(Exception e){}
try{
if(conn!=null) conn.close();
}catch(Exception e){}
%>
</body>
</html>