本文以目前最流行的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個空閑的連接,而不被清除,隨時處于待命狀態(tài)。設為0表示無限制。-->
maxWait="10000"????<!--最大建立連接等待時間。如果超過此時間將接到異常。這里設置為10000,表示10秒后超時。設為-1表示無限制,直到超時為止。-->
????jdbc:mysql://localhost/jcc????<!--數據庫連接字符串,同jdbc:mysql://localhost:3306/jcc?autoReconnect=true-->
????PS:如果最大數據庫活躍連接數過大,可想而知,內存占用量是非常驚人的!如果空閑連接數過大,則資源利用率低,連接池長期未釋放,可導致連接池結點異常。所以選好maxActive和maxIdle是連接池性能的關鍵因素,當然這取決于服務器環(huán)境。
*附:
連接池運作原理:
在實際應用開發(fā)中,特別是在WEB應用系統(tǒng)中,如果JSP、Servlet或EJB使用JDBC直接訪問數據庫中的數據,每一次數據訪問請求都必須經歷建立數據庫連接、打開數據庫、存取數據和關閉數據庫連接等步驟,而連接并打開數據庫是一件既消耗資源又費時的工作,如果頻繁發(fā)生這種數據庫操作,系統(tǒng)的性能必然會急劇下降,甚至會導致系統(tǒng)崩潰。數據庫連接池技術是解決這個問題最常用的方法,在許多應用程序服務器(例如:Weblogic,WebSphere,JBoss)中,基本都提供了這項技術,無需自己編程,但是,深入了解這項技術是非常必要的。
數據庫連接池技術的思想非常簡單,將數據庫連接作為對象存儲在一個Vector對象中,一旦數據庫連接建立后,不同的數據庫訪問請求就可以共享這些連接,這樣,通過復用這些已經建立的數據庫連接,可以克服上述缺點,極大地節(jié)省系統(tǒng)資源和時間。
數據庫連接池的主要操作如下:
(1)建立數據庫連接池對象(服務器啟動)。
(2)按照事先指定的參數創(chuàng)建初始數量的數據庫連接(即:空閑連接數)。
(3)對于一個數據庫訪問請求,直接從連接池中得到一個連接。如果數據庫連接池對象中沒有空閑的連接,且連接數沒有達到最大(即:最大活躍連接數),創(chuàng)建一個新的數據庫連接。
(4)存取數據庫。
(5)關閉數據庫,釋放所有數據庫連接(此時的關閉數據庫連接,并非真正關閉,而是將其放入空閑隊列中。如實際空閑連接數大于初始空閑連接數則釋放連接)。
(6)釋放數據庫連接池對象(服務器停止、維護期間,釋放數據庫連接池對象,并釋放所有連接)。
希望本文能對你使用Tomcat連接池連接MySQL數據庫有所幫助!
參考文獻:
http://jakarta.apache.org/tomcat/tomcat-5.0-doc/jndi-datasource-examples-howto.html
http://jakarta.apache.org/tomcat/tomcat-5.5-doc/jndi-datasource-examples-howto.html