Tomcat5.0-5.5接続プール構成ガイド

8930 ワード

要約:
実際のアプリケーション開発において、特にWEBアプリケーションシステムにおいて、JSP、サーブレットまたはEJBがJDBCを使用してデータベース内のデータに直接アクセスする場合、データアクセス要求のたびにデータベース接続の確立、データベースのオープン、データのアクセス、データベース接続のクローズなどのステップを経なければならないが、データベースに接続して開くことはリソースを消費し、時間がかかる仕事である.このようなデータベース・オペレーションが頻繁に発生すると、システムのパフォーマンスが急激に低下し、システムがクラッシュすることもあります.データベース接続プール技術はこの問題を解決する最もよく使われる方法である.
本明細書のMatrix永続ミラー:
http://www.matrix.org.cn/resource/article/43/43722_Tomcat.html
説明:本文はMatrixがオリジナルであるか、Matrixの会員が整理しているか、または
MatrixのCrawlerは、世界的に有名なJavaまたはその他の技術関連サイトでキャプチャされ、永続的に
ミラーを保持し、Matrixはすべての元の出典URLを保持し、顕著な場所で説明します.
出典URLが間違っていることに気づいたら、Matrixに連絡して修正してください.
ここでは、現在最も流行しているMySQLを例に、Tomcat接続プールを介してMySQLデータベースに接続する基本的な手順を説明します.MySQLを知っていれば、最初のステップをスキップできます.
Tomcat接続プールの構成を行う前に、解凍します.
mysql-connector-java-xxx.zip、その中の
mysql-connector-java-3.x.x-xxx.JAr取り出し、置く
<%TOMCAT_HOME%>commonlib中.
次に、素晴らしい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の……の間に次のコードを追加します.
<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の……の間に次のコードを追加します.
<
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-list1 Corebit2 Ivan
データベース接続に成功したことを示します.おめでとう!おめでとう!
そうでない場合は、データベースコネクタのバージョンを確認してください.エラーの可能性が高いです.
  
*注:
Tomcat接続プールでは、パラメータの一部は次のように説明されています.
  maxActive="100"  
  maxIdle="30"
  maxWait="10000"
jdbc:mysql://localhost/jcc
PS:最大データベースのアクティブ接続数が大きすぎると、メモリの使用量が驚くほど多いことがわかります.空き接続数が大きすぎると、リソース使用率が低く、接続プールが長期にわたって解放されず、接続プールのノードが異常になる可能性があります.したがって、maxActiveとmaxIdleを選択することは、サーバ環境に依存して、接続プールのパフォーマンスの重要な要素です.
  
*添付:
接続プールの動作原理:
実際のアプリケーション開発において、特にWEBアプリケーションシステムにおいて、JSP、サーブレットまたはEJBがJDBCを使用してデータベース内のデータに直接アクセスする場合、データアクセス要求のたびにデータベース接続の確立、データベースのオープン、データのアクセス、データベース接続のクローズなどのステップを経なければならないが、データベースに接続して開くことはリソースを消費し、時間がかかる仕事である.このようなデータベース・オペレーションが頻繁に発生すると、システムのパフォーマンスが急激に低下し、システムがクラッシュすることもあります.データベース接続プール・テクノロジーは、この問題を解決するために最も一般的な方法であり、多くのアプリケーション・サーバ(例えば、Weblogic、WebSphere、JBoss)では、基本的にこのテクノロジーを提供しており、自分でプログラミングする必要はありませんが、このテクノロジーを深く理解する必要があります.
データベース接続プール技術の考え方は非常に簡単で、データベース接続をオブジェクトとして1つのVectorオブジェクトに格納し、データベース接続が確立されると、異なるデータベースアクセス要求がこれらの接続を共有することができ、これにより、これらの確立されたデータベース接続を多重化することで、上述の欠点を克服し、システムリソースと時間を極めて節約することができる.
データベース接続プールの主な操作は次のとおりです.
(1)データベース接続プールオブジェクトの確立(サーバ起動).
(2)事前に指定したパラメータに従って、初期数のデータベース接続(すなわち、空き接続数)を作成する.
(3)1つのデータベースアクセス要求に対して,直接接続プールから1つの接続を得る.データベース接続プール・オブジェクトに空き接続がなく、接続数が最大(すなわち、最大アクティブ接続数)に達していない場合は、新しいデータベース接続を作成します.
(4)データベースへのアクセス.
(5)データベースをシャットダウンし、すべてのデータベース接続を解放する(このときのデータベース接続をシャットダウンするのは、実際にシャットダウンするのではなく、アイドルキューに入れます.実際のアイドル接続数が最初のアイドル接続数より大きい場合は、接続を解放します).
(6)データベース接続プールオブジェクトを解放する(サーバ停止、メンテナンス中、データベース接続プールオブジェクトを解放し、すべての接続を解放する).
Tomcat接続プールを使用してMySQLデータベースに接続するのに役立つことを期待しています.