dbcp mysql tomcat_在Tomcat 7配置Servlet 3.0项目的MySQL 5.5的DBCP连接池

《在Tomcat 7配置Servlet 3.0项目的MySQL 5.5的DBCP连接池》

2012-6-5

版权声明:本文属于原创,版权归作者chszs所有,使用源码无任何限制,但转载文章需经作者同意。一、简介

数据库连接池的基本原理是,在内部对象池中维护一定数量的数据库连接,并对外暴露从连接池获取数据库连接和释放连接的方法。

数据库连接池技术的优点:

²       资源重用。避免频繁创建连接、释放连接带来的性能开销。

²       更快的系统响应速度。减少了初始化数据库连接的时间,因为数据库连接池在初始化时,已经创建了一定数量的数据库连接。

²       统一的连接管理。避免数据库连接的内存泄漏。

本文教你如何在Tomcat 7.0.27应用服务器上配置Jakarta Commons Database Connection Pool(DBCP连接池),配置的连接池在Servlet 3.0项目中运行正常。

DBCP是一个数据库连接池工具,而Tomcat Servlet引擎中包含了该技术。

注意:在Tomcat 5.x和Tomcat 6.x等版本下配置JNDI数据源有很多不同。二、JAR包

MySQL的JDBC驱动包是必须的,下载mysql-connector-java-5.1.19.zip,并解压;

再把文件mysql-connector-java-5.1.19-bin.jar复制到Tomcat\lib目录;

DBCP连接池依赖于两个包:commons-dbcp.jar和commons-pool.jar。但这两个库都已经被封装到Tomcat/lib/tomcat-dbcp.jar文件中,而且,对类的包名重新命名,以避免与应用程序发生干扰。

Tomcat的lib目录已经包含了tomcat-dbcp.jar库。三、Tomcat配置MySQL数据源

Tomcat配置数据源,不同的数据库有不同的配法,基本上相同,仅仅是具体的参数略有不同。这里配置MySQL数据源。

在Tomcat的conf子目录内,打开context.xml配置文件,看这里:

WEB-INF/web.xml

复制代码

在标签内增加一个标签,并去除注释,内容如下:

WEB-INF/web.xml

type="javax.sql.DataSource"

maxActive="80" maxIdle="20" maxWait="10000" removeAbandoned="true"

username="guan" password="guan123456"

driverClassName="com.mysql.jdbc.Driver"

url="jdbc:mysql://localhost:3306/webt3" />

复制代码注意:黄色强调的内容为新增内容。四、验证

构建一个简单的Web项目,项目使用了Tomcat 7的DBCP连接池,从MySQL数据库读写数据。具体如下:1、创建MySQL数据库

创建了数据库、表、用户,并对用户的访问权限进行授权,最后插入一点数据。

mysql> CREATE DATABASE webt3;

mysql> CREATE USER 'guan'@'%' IDENTIFIED BY 'guan123456';

mysql> GRANT ALL ON webt3.* TO 'guan'@'%';

mysql> USE webt3;

mysql> DROP TABLE IF EXISTS `student`;

mysql> CREATE TABLE `student`(

`id` INT(11) NOT NULL AUTO_INCREMENT,

`name` VARCHAR(20) DEFAULT NULL,

`record` INT(11) DEFAULT NULL,

PRIMARY KEY(`id`)

) ENGINE=INNODB DEFAULT CHARSET=utf8;复制代码

向表中插入几条数据:

mysql> INSERT INTO student VALUES(NULL, 'hello', 12345);

mysql> INSERT INTO student VALUES(NULL, '张素钠', 98373);

mysql> INSERT INTO student VALUES(NULL, '万科', 33238);复制代码2、创建动态Web项目

在Eclipse的JEE版中创建动态Web项目,项目的各项设置如下图所示:

dd06a1abc3fb84da465ff4eff32374f6.gif

1.jpg (44.9 KB, 下载次数: 31)

2012-6-5 16:12 上传

注意是Servlet 3.0项目,为了配置使用数据库连接池,要生成web.xml部署描述符文件。

dd06a1abc3fb84da465ff4eff32374f6.gif

2.jpg (19.19 KB, 下载次数: 29)

2012-6-5 16:13 上传

生成的项目结构如下图所示:

dd06a1abc3fb84da465ff4eff32374f6.gif

3.jpg (19.89 KB, 下载次数: 21)

2012-6-5 16:14 上传

3、修改web.xml部署描述符

打开项目下WebContent/WEB-INF目录的web.xml文件,修改内容:

xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"

id="WebApp_ID" version="3.0">

webt3

index.jsp

Tomcat 7 DBCP

jdbc/mysql5

javax.sql.DataSource

Container

复制代码

注:黄色强调部分是新增内容,要与Tomcat的server.xml的配置保持一致。4、编写代码

4.1、创建实体类ch.entity.Student.java,如下:

package ch.entity;

import java.io.Serializable;

public class Student implements Serializable {

private static final long serialVersionUID = -2851451446149648542L;

private int id;

private String name;

private int record;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getRecord() {

return record;

}

public void setRecord(int record) {

this.record = record;

}

@Override

public String toString() {

return "Student [id=" + id + ", name=" + name + ", record=" + record

+ "]";

}

}复制代码

4.2、创建数据库访问类ch.dao.DBconn.java,如下:

package ch.dao;

import java.sql.*;

import java.util.List;

import java.util.ArrayList;

import javax.naming.Context;

import javax.naming.InitialContext;

import javax.naming.NamingException;

import javax.sql.DataSource;

import ch.entity.Student;

public class DBconn {

Context context = null;

DataSource ds = null;

Connection conn = null;

List students;

public DBconn(){

initConnection();

this.students = new ArrayList();

}

private void initConnection(){

try {

context = new InitialContext();

} catch (NamingException e) {

System.err.println("连接池上下文不存在! " + e.getMessage());

}

try {

ds = (DataSource)context.lookup("java:comp/env/jdbc/mysql5");

} catch (NamingException e) {

System.err.println("数据源没发现! " + e.getMessage());

}

try {

conn = ds.getConnection();

} catch (SQLException e) {

System.err.println("获取连接失败! " + e.getMessage());

}

}

private void freeConnection() {

try {

conn.close();

} catch (Exception e) {

System.err.println("释放连接出错! ");

e.printStackTrace();

}

}

public List getAllStudents() {

Statement stmt = null;

ResultSet rs = null;

String sql = "SELECT id, name, record FROM student";

try {

stmt = conn.createStatement();

rs = stmt.executeQuery(sql);

rs = stmt.getResultSet();

while (rs.next()) {

Student tmp = new Student();

tmp.setId(rs.getInt(1));

tmp.setName(rs.getString(2));

tmp.setRecord(rs.getInt(3));

students.add(tmp);

}

if (rs != null)

rs.close();

if (stmt != null)

stmt.close();

} catch (SQLException ex) {

System.out.println("SQLException: " + ex.getMessage());

System.out.println("SQLState: " + ex.getSQLState());

System.out.println("VendorError: " + ex.getErrorCode());

} finally{

freeConnection();

}

return students;

}

}复制代码

4.3、在WebContent目录下创建JSP文件:index.jsp

pageEncoding="UTF-8"%>

/p>

"http://www.w3.org/TR/html4/loose.dtd">

测试连接池

DBconn conn = new DBconn();

List students = conn.getAllStudents();

if(students!=null && students.size()>0){

for(Student student : students){

out.println(student.toString());

}

}

%>

复制代码5、部署项目并运行

把项目部署到Tomcat 7,并运行Tomcat应用服务器,显示结果如下:

dd06a1abc3fb84da465ff4eff32374f6.gif

4.jpg (18.94 KB, 下载次数: 30)

2012-6-5 16:16 上传

6、结论

证明数据库连接池配置成功!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值