首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Tomcat自带连接池使用【转】

2012-09-14 
Tomcat自带连接池应用【转】tomcat6.0连接mysql数据库连接池[原创]1 下载Tomcat最新版本下载地址:http://tom

Tomcat自带连接池应用【转】

tomcat6.0连接mysql数据库连接池[原创]

1 下载Tomcat最新版本
下载地址:http://tomcat.apache.org/
2 下载mysql最新版本以及最近版本的驱动程序
下载地址:http://dev.mysql.com/downloads
http://dev.mysql.com/downloads/connector
并将下载的mysql-connector-java-5.1.0-bin.jar a连接文件放到$CATALINA_HOME/lib/下。
3 安装mysql数据库
4 创建一个tomcat应用程序,工程的名字为DBTest
5 修改$CATALINA_HOME/conf/ context.xml为以下内容
<Context path="/DBTest" docBase="DBTest"
??????? debug="5" reloadable="true" crossContext="true">
??? <!-- maxActive: Maximum number of dB connections in pool. Make sure you configure your mysqld max_connections large enough to handle
???????? all of your db connections. Set to 0 for no limit.
???????? -->
??? <!-- maxIdle: Maximum number of idle dB connections to retain in pool.
???????? Set to -1 for no limit.? See also the DBCP documentation on this
???????? and the minEvictableIdleTimeMillis configuration parameter.
???????? -->
??? <!-- maxWait: Maximum time to wait for a dB connection to become available
???????? in ms, in this example 10 seconds. An Exception is thrown if
???????? this timeout is exceeded.? Set to -1 to wait indefinitely.
???????? -->
??? <!-- username and password: MySQL dB username and password for dB connections? -->
??? <!-- driverClassName: Class name for the old mm.mysql JDBC driver is
???????? org.gjt.mm.mysql.Driver - we recommend using Connector/J though.
???????? Class name for the official MySQL Connector/J driver is com.mysql.jdbc.Driver.
???????? -->
?????? <!-- url: The JDBC connection url for connecting to your MySQL dB.
???????? The autoReconnect=true argument to the url makes sure that the
???????? mm.mysql JDBC Driver will automatically reconnect if mysqld closed the
???????? connection.? mysqld by default closes idle connections after 8 hours.
???????? -->
? <Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
?????????????? maxActive="100" maxIdle="30" maxWait="10000"
?????????????? username="javauser" password="javadude" driverClassName="com.mysql.jdbc.Driver"
?????????????? url="jdbc:mysql://localhost:3306/ jtest?autoReconnect=true"/>

</Context>
此时要注意修改自己的数据库的用户名和密码
我建立的
数据库:jtest
用户名:javauser
密码:javadude
6 修改工程目录下的web.xml文件添加如下
<description>MySQL Test App</description>
? <resource-ref>
????? <description>DB Connection</description>
????? <res-ref-name>jdbc/TestDB</res-ref-name>
????? <res-type>javax.sql.DataSource</res-type>
????? <res-auth>Container</res-auth>
? </resource-ref>
7 创建一个java类
package com.test;

/*
* DBTest.java
*
* Created on 2007/06/07, 10:33:02
*
* To change this template, choose Tools | Template Manager
* and open the template in the editor.
*/

/**
*
* @author wangzicai
*/
import javax.naming.*;
import javax.sql.*;
import java.sql.*;
public class DBTest {
??? String foo = "Not Connected";
??? int bar = -1;
??? public void init() {
??????? try{
??????????? Context ctx = new InitialContext();
??????????? if(ctx == null )
??????????????? throw new Exception("Boom - No Context");
??????????? DataSource ds =
??????????????????? (DataSource)ctx.lookup(
??????????????????? "java:comp/env/jdbc/TestDB");
??????????? if (ds != null) {
??????????????? Connection conn = ds.getConnection();
??????????????? if(conn != null) {
??????????????????? foo = "Got Connection "+conn.toString();
??????????????????? Statement stmt = conn.createStatement();
??????????????????? ResultSet rst =
??????????????????????????? stmt.executeQuery(
??????????????????????????? " select * from test ");
??????????????????? if(rst.next()) {
??????????????????????? foo=rst.getString(1);
??????????????????????? bar=208;
??????????????????? }
??????????????????? conn.close();
??????????????? }
??????????? }
??????? }catch(Exception e) {
??????????? e.printStackTrace();
??????? }
??? }
??? public String getFoo() { return foo; }
??? public int getBar() { return bar;}
}



8 编辑index.jsp


<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page import ="com.test.*" %>
<html>
<head>
<title>DB Test</title>
</head>
<body>
<%
DBTest tst = new DBTest();
tst.init();
%>
<h2>Results</h2>
Foo <%= tst.getFoo() %><br>
Bar <%= tst.getBar() %>
</body>
</html>
9 部署测试

?

================参数说明=========================

有时粗心的程序编写者在从连接池中获取连接使用后忘记了连接的关闭,这样连池的连接就会逐渐达到maxActive直至连接池无法提供服务。现代连接池一般提供一种“智能”的检查,但设置了removeAbandoned="true"时,当连接池连接数到达(getNumIdle() < 2) and (getNumActive() > getMaxActive() - 3)时便会启动连接回收,那种活动时间超过removeAbandonedTimeout="60"的连接将会被回收,同时如果logAbandoned="true"设置为true,程序在回收连接的同时会打印日志。removeAbandoned是连接池的高级功能,理论上这中配置不应该出现在实际的生产环境,因为有时应用程序执行长事务,可能这种情况下,会被连接池误回收,该种配置一般在程序测试阶段,为了定位连接泄漏的具体代码位置,被开启,生产环境中连接的关闭应该靠程序自己保证。


热点排行