Tomcat5.0-5.5連接池配置指南

 本文以目前最流行的MySQL爲例,講解通過Tomcat連接池連接MySQL數據庫的基本步驟,如果你瞭解MySQL可跳過第一步。

  在進行Tomcat連接池配置前,先解壓縮mysql-connector-java-xxx.zip,將其中的mysql-connector-java-3.x.x-xxx.jar取出,置於<%TOMCAT_HOME%>/common/lib中。

  接下來,讓我們一起進入精彩的Tomcat配置之旅。

一.新建用戶及數據庫

操作步驟如下:

C:/Documents and Settings/Administrator>d:

D:/>cd mysql/bin

D:/MySQL/bin>mysql -u root -p
Enter password: *******
Welcome to the MySQL monitor. Commands end with ; or /g.
Your MySQL connection id is 51 to server version: 4.1.12a-nt

Type 'help;' or '/h' for help. Type '/c' to clear the buffer.

mysql> GRANT ALL PRIVILEGES ON jcc.* TO jcc@localhost IDENTIFIED BY 'jsp.com.cn'
WITH GRANT OPTION;
Query OK, 0 rows affected (0.01 sec)

mysql> USE mysql;
Database changed
mysql> SELECT Host,User,Password FROM user;
+-----------+------+-------------------------------------------+
| Host     | User | Password                       |
+-----------+------+-------------------------------------------+
| localhost | root | *60D5B730382EC2170CA366DE181767E4C5343DE8 |
| %       | jsp | *C22AB0FD8A289C7D337C9998B63B8EA8335E5F35 |
| localhost | jcc | *C22AB0FD8A289C7D337C9998B63B8EA8335E5F35 |
+-----------+------+-------------------------------------------+
3 rows in set (0.01 sec)

mysql> exit
Bye

D:/MySQL/bin>mysql -u jcc -p
Enter password: **********
Welcome to the MySQL monitor. Commands end with ; or /g.
Your MySQL connection id is 57 to server version: 4.1.12a-nt

Type 'help;' or '/h' for help. Type '/c' to clear the buffer.

mysql> CREATE DATABASE jcc;
Query OK, 1 row affected (0.02 sec)

mysql> USE jcc;
Database changed
mysql> CREATE TABLE user(
  ->   id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  ->   name VARCHAR(8) NOT NULL
  -> );
Query OK, 0 rows affected (0.08 sec)

mysql> INSERT INTO user (name) VALUES ('Corebit');
Query OK, 1 row affected (0.03 sec)

mysql> INSERT INTO user (name) VALUES ('Ivan');
Query OK, 1 row affected (0.03 sec)

mysql> SELECT * FROM user;
+----+---------+
| id | name   |
+----+---------+
| 1 | Corebit |
| 2 | Ivan   |
+----+---------+
2 rows in set (0.00 sec)

mysql>


二.配置Tomcat連接池

Tomcat5.0進行如下配置:

在<%TOMCAT_HOME%>/conf/server.xml的<Host>...</Host>之間加入以下代碼:

<Context path="" docBase="D:/jcc"
    debug="5" reloadable="true" crossContext="true">

<Logger className="org.apache.catalina.logger.FileLogger"
        prefix="localhost_DBTest_log." suffix=".txt"
        timestamp="true"/>

<Resource name="jdbc/JCC"
          auth="Container"
          type="javax.sql.DataSource"/>

<ResourceParams name="jdbc/JCC">
  <parameter>
    <name>factory</name>
    <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
  </parameter>

  <parameter>
    <name>maxActive</name>
    <value>100</value>
  </parameter>

  <parameter>
    <name>maxIdle</name>
    <value>30</value>
  </parameter>

  <parameter>
    <name>maxWait</name>
    <value>10000</value>
  </parameter>

  <parameter>
  <name>username</name>
  <value>jcc</value>
  </parameter>
  <parameter>
  <name>password</name>
  <value>jsp.com.cn</value>
  </parameter>

  <parameter>
    <name>driverClassName</name>
    <value>com.mysql.jdbc.Driver</value>
  </parameter>

  <parameter>
    <name>url</name>
    <value>jdbc:mysql://localhost/jcc</value>
  </parameter>
</ResourceParams>
</Context>



Tomcat5.5進行如下配置:

在<%TOMCAT_HOME%>/conf/server.xml的<Host>...</Host>之間加入以下代碼:

<

Context path="" docBase="D:/jcc"
    debug="5" reloadable="true" crossContext="true">

<Resource name="jdbc/JCC" auth="Container" type="javax.sql.DataSource"
          maxActive="100" maxIdle="30" maxWait="10000"
          username="jcc" password="jsp.com.cn" driverClassName="com.mysql.jdbc.Driver"
          url="jdbc:mysql://localhost/jcc"/>

</Context>



三.在<%wwwroot%>/下,新建MySQL數據庫連接文件Select.jsp

  Select.jsp源碼如下:

<%@page contentType="text/html;charset=gb2312"%>
<%@page import="java.sql.*"%>
<%@page import="javax.sql.DataSource"%>
<%@page import="javax.naming.*"%>
<html>
<body>
<%
try{
Context initCtx=new InitialContext();
DataSource db = (DataSource)initCtx.lookup("java:comp/env/jdbc/JCC");
Connection conn = db.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM user");
out.println("User-list"+"<br>");
while(rs.next()){
  out.print(rs.getString(1)+" ");
  out.print(rs.getString(2)+"<br>");
}
rs.close();
stmt.close();
conn.close();
}
catch(Exception e){
out.print(e);
}
%>
</body>
</html>



四.運行
http://localhost/Select.jsp,顯示結果如下:

User-list
1 Corebit
2 Ivan

  則表示數據庫連接成功!恭喜!恭喜!

  否則請檢查數據庫連接器版本,出錯可能性比較高!

  *注:

  Tomcat連接池中,部分參數說明如下:

  maxActive="100"  <!--最大活躍連接數,這裏取值爲100,表示同時最多有100個數據庫連接。設爲0表示無限制。-->

  maxIdle="30"     <!--最大的空閒連接數,這裏取值爲30,表示即使沒有數據庫連接時依然可以保持30個空閒的連接,而不被清除,隨時處於待命狀態。設爲0表示無限制。-->

  maxWait="10000"   <!--最大建立連接等待時間。如果超過此時間將接到異常。這裏設置爲10000,表示10秒後超時。設爲-1表示無限制,直到超時爲止。-->

  jdbc:mysql://localhost/jcc   <!--數據庫連接字符串,同jdbc:mysql://localhost:3306/jcc?autoReconnect=true-->

  PS:如果最大數據庫活躍連接數過大,可想而知,內存佔用量是非常驚人的!如果空閒連接數過大,則資源利用率低,連接池長期未釋放,可導致連接池結點異常。所以選好maxActive和maxIdle是連接池性能的關鍵因素,當然這取決於服務器環境。

  *附:

  連接池運作原理:

  在實際應用開發中,特別是在WEB應用系統中,如果JSP、Servlet或EJB使用JDBC直接訪問數據庫中的數據,每一次數據訪問請求都必須經歷建立數據庫連接、打開數據庫、存取數據和關閉數據庫連接等步驟,而連接並打開數據庫是一件既消耗資源又費時的工作,如果頻繁發生這種數據庫操作,系統的性能必然會急劇下降,甚至會導致系統崩潰。數據庫連接池技術是解決這個問題最常用的方法,在許多應用程序服務器(例如:Weblogic, WebSphere,JBoss)中,基本都提供了這項技術,無需自己編程,但是,深入瞭解這項技術是非常必要的。

  數據庫連接池技術的思想非常簡單,將數據庫連接作爲對象存儲在一個Vector對象中,一旦數據庫連接建立後,不同的數據庫訪問請求就可以共享這些連接,這樣,通過複用這些已經建立的數據庫連接,可以克服上述缺點,極大地節省系統資源和時間。

  數據庫連接池的主要操作如下:

  (1)建立數據庫連接池對象(服務器啓動)。

  (2)按照事先指定的參數創建初始數量的數據庫連接(即:空閒連接數)。

  (3)對於一個數據庫訪問請求,直接從連接池中得到一個連接。如果數據庫連接池對象中沒有空閒的連接,且連接數沒有達到最大(即:最大活躍連接數),創建一個新的數據庫連接。

  (4)存取數據庫。

  (5)關閉數據庫,釋放所有數據庫連接(此時的關閉數據庫連接,並非真正關閉,而是將其放入空閒隊列中。如實際空閒連接數大於初始空閒連接數則釋放連接)。

  (6)釋放數據庫連接池對象(服務器停止、維護期間,釋放數據庫連接池對象,並釋放所有連接)。

發佈了3 篇原創文章 · 獲贊 3 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章