配置TOMCAT数据库连接池



TOMCAT数据库连接池。

如果数据库连接池仅仅是对特定的项目作用,则可以采用如下配置方案:

1、在自己的项目中的 META-INF 文件夹下面新建 context.xml,贴入类似如下代码:

 

  1. <?xml version=’1.0′ encoding=’utf-8′?>
  2. <Context path=”/tuanplus” docBase=”tuanplus” debug=”5″
  3.     reloadable=”true” crossContext=”true”>
  4.     <Resource name=”jdbc/tuanplus” auth=”Container” type=”javax.sql.DataSource”
  5.         maxActive=”100″ maxIdle=”30″ maxWait=”10000″ username=”root” password=”fkeuggwn”
  6.         driverClassName=”com.mysql.jdbc.Driver” url=”jdbc:mysql://localhost:3306/tuanplus” />
  7. </Context>
<?xml version='1.0' encoding='utf-8'?>

<Context path="/tuanplus" docBase="tuanplus" debug="5"
	reloadable="true" crossContext="true">
	<Resource name="jdbc/tuanplus" auth="Container" type="javax.sql.DataSource"
		maxActive="100" maxIdle="30" maxWait="10000" username="root" password="fkeuggwn"
		driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/tuanplus" />
</Context>

 

解释一下:

path:指定此数据源的作用地址,一般是自己项目的path

docBase:项目名称

name:此数据源的名称,以后java代码中获取数据源依据此名称

auth:未知作用,一般都指定Container,是容器的意思

type:无疑,javax.sql.DataSource

maxActive:最大活跃连接数,最多保持这么多连接

maxIdle:最大空闲连接数目,空闲连接大于此值的时候都会被close

maxWait:请求的最大等待时间

2、在 web.xml 中加入如下代码:


 

  1. <resource-ref>
  2.     <description>Tuanplus JDBC</description>
  3.     <res-ref-name>jdbc/tuanplus</res-ref-name>
  4.     <res-type>javax.sql.DataSource</res-type>
  5.     <res-auth>Container</res-auth>
  6. </resource-ref>
	<resource-ref>
		<description>Tuanplus JDBC</description>
		<res-ref-name>jdbc/tuanplus</res-ref-name>
		<res-type>javax.sql.DataSource</res-type>
		<res-auth>Container</res-auth>
	</resource-ref>

 

解释一下:

description:描述信息,相当于注释

res-ref-name:需要引入的连接池的名称,即 context.xml 中的 name.

res-type:依旧无疑,javax.sql.DataSource

res-auth:Container,容器

3、编写 java 代码,这里顺便引入一个我觉得比较不错的数据库操作的 Helper 类

Db.java

 

  1. package com.tuanplus.util;
  2. import java.sql.Connection;
  3. import java.sql.PreparedStatement;
  4. import java.sql.ResultSet;
  5. import java.sql.SQLException;
  6. import javax.naming.Context;
  7. import javax.naming.InitialContext;
  8. import javax.naming.NamingException;
  9. import javax.sql.DataSource;
  10. public class Db {
  11.     private Connection conn;
  12.     /**
  13.      * 初始化操作,得到connection..
  14.      */
  15.     public Db() {
  16.         try {
  17.             InitialContext ictx = new InitialContext();
  18.             Context envContext = (Context) ictx.lookup(“java:/comp/env”);
  19.             DataSource ds = (DataSource) envContext.lookup(“jdbc/tuanplus”);
  20.             conn = ds.getConnection();
  21.         } catch (NamingException e) {
  22.             e.printStackTrace();
  23.         } catch (SQLException e) {
  24.             e.printStackTrace();
  25.         }
  26.     }
  27.     /**
  28.      * 执行插入、更新、删除操作
  29.      *
  30.      * @param sql
  31.      * @param args
  32.      * @return
  33.      */
  34.     public boolean update(String sql, Object… args) {
  35.         try {
  36.             PreparedStatement ps = conn.prepareStatement(sql);
  37.             for (int i = 0; i < args.length; i++) {
  38.                 ps.setObject(i + 1, args[i]);
  39.             }
  40.             if (ps.executeUpdate() < 1) {
  41.                 return false;
  42.             }
  43.         } catch (SQLException e) {
  44.             e.printStackTrace();
  45.         }
  46.         return true;
  47.     }
  48.     /**
  49.      * 执行查询
  50.      *
  51.      * @param sql
  52.      * @param args
  53.      * @return
  54.      */
  55.     public ResultSet query(String sql, Object… args) {
  56.         try {
  57.             PreparedStatement ps = conn.prepareStatement(sql);
  58.             for (int i = 0; i < args.length; i++) {
  59.                 ps.setObject(i + 1, args[i]);
  60.             }
  61.             return ps.executeQuery();
  62.         } catch (SQLException e) {
  63.             e.printStackTrace();
  64.         }
  65.         return null;
  66.     }
  67. }
package com.tuanplus.util;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

public class Db {
	private Connection conn;

	/**
	 * 初始化操作,得到connection..
	 */
	public Db() {
		try {
			InitialContext ictx = new InitialContext();
			Context envContext = (Context) ictx.lookup("java:/comp/env");
			DataSource ds = (DataSource) envContext.lookup("jdbc/tuanplus");
			conn = ds.getConnection();
		} catch (NamingException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 执行插入、更新、删除操作
	 * 
	 * @param sql
	 * @param args
	 * @return
	 */
	public boolean update(String sql, Object... args) {
		try {
			PreparedStatement ps = conn.prepareStatement(sql);
			for (int i = 0; i < args.length; i++) {
				ps.setObject(i + 1, args[i]);
			}
			if (ps.executeUpdate() < 1) {
				return false;
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return true;
	}

	/**
	 * 执行查询
	 * 
	 * @param sql
	 * @param args
	 * @return
	 */
	public ResultSet query(String sql, Object... args) {
		try {
			PreparedStatement ps = conn.prepareStatement(sql);
			for (int i = 0; i < args.length; i++) {
				ps.setObject(i + 1, args[i]);
			}
			return ps.executeQuery();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
}

 

构造函数中的内容即使通过连接池获取 connection 连接。

4、编写测试 JSP,需要注意的是,测试必须在服务器下进行。

 

  1. <%@ page language=”java” import=”java.util.*” pageEncoding=”UTF-8″%>
  2. <%@page import=”com.tuanplus.util.Db”%>
  3. <%
  4.     String path = request.getContextPath();
  5.     String basePath = request.getScheme() + “://”
  6.             + request.getServerName() + “:” + request.getServerPort()
  7.             + path + “/”;
  8. %>
  9. <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
  10. <html>
  11.     <head>
  12.         <base href=”<%=basePath%>”>
  13.         <title>My JSP ‘index.jsp’ starting page</title>
  14.         <meta http-equiv=”pragma” content=”no-cache”>
  15.         <meta http-equiv=”cache-control” content=”no-cache”>
  16.         <meta http-equiv=”expires” content=”0″>
  17.         <meta http-equiv=”keywords” content=”keyword1,keyword2,keyword3″>
  18.         <meta http-equiv=”description” content=”This is my page”>
  19.         <!–
  20.     <link rel=”stylesheet” type=”text/css” href=”styles.css”>
  21.     –>
  22.     </head>
  23.     <body>
  24.         <%
  25.             Db db = new Db();
  26.             boolean i = db.update(“INSERT INTO user VALUES(null,?,?,?)”,
  27.                     “mzule”, “123456″, “888888@qq.com”);
  28.         %>
  29.         <%=i%>
  30.     </body>
  31. </html>